java022

제로·2022년 9월 15일
0

Java basic

목록 보기
22/45
post-custom-banner

super와 this

  1. this
    1) 인스턴스 필드/메서드를 호출할 때 사용 ex) this.필드명
    2) 다른 생성자를 호출할 때 사용 ex) this();
  2. super
    1) 상속관계에서 상위/하위 클래스가 동일한 멤버를 사용할 때 구분하기 위해서 활용
    주로 생성자와 메서드에서 사용된다
    2) 생성자
    - 하위 객체는 상위 객체의 생성자를 생성하면서 처리가 된다
    default 생성자에 의해서 기본적으로 호출 된다
class Father{
		public Father(){} // default 생성자 포함
}
class Son extends Father{
		 public Son(){
		 super();  // default 상위 생성자를 호출
		}
}


class Father{
		public Father(String s){}
}
class Son extends Father{
		public Son(){
			super("홍길동");
		}
// 객체 생성자를 통해서 상위에 있는 매개변수가 있는 생성자를 반드시 호출하여야 하기 때문에 기본 선언으로는 에러가 발생.

3) 메서드에 사용하는 super.메서드()
- 오버라이딩
1)하위 클래스에서 다양한 기능을 처리하기 위해 상위 클래스에 있는 동일한 기능 메서드를 동일한 메서드명으로 재정의하여 사용하는 것을 말한다.
2)이때, 상위의 메서드 내용도 호출해서 사용하려면, 현재 정의된 메서드와 구분하기 위해 super.메서드명()으로 호출해서 처리한다.
3) 주로 다형성(polymorphism)을 위하여 사용된다

Programmer pg = new Programmer();
pg.working();
// 출력내용
// 개발자 열심히 일을 한다.
// 프로그램을 개발하는 일을 한다.  

class Worker{
	private String kind;
	public Worker(String kind) {
		this.kind=kind;
	}
	public void working() {
		System.out.println(this.kind+" 열심히 일을 한다.");
	}
}

class Programmer extends Worker{

	public Programmer() {
		super("개발자");
	}
	public void working() {
		super.working();
		// 상위에 있는 메서드를 호출 super.: 상위의 메서드를 사용하고자 할 때
		System.out.println("프로그램을 개발하는 일을 한다.");
	}
}

다형성(Polymorphism)

  1. 같은 타입이지만 실행 결과가 다양한 객체 대입이 가능한 성질
    1) 부모 타입에는 모든 자식 객체가 대입 가능
    - 자식 타입은 부모 타입으로 자동 타입 변환
  2. 자동 타입 변환(Promotion)
    1) 형식
    부모클래스 변수 = 자식클래스 타입
    Animal a1 = new Cat();
Larba l1 = new Dron();
		l1.attack();
		// 다형성에 의해 첫번째 라바는 dron으로 변형되었기에 dron에 정의된 attack()을 처리
		Larba l2 = new Zerggling();
		l2.attack();


class Larba{
	private String kind;
	public Larba(String kind) {
		this.kind=kind;
	}
	public void attack() {
		System.out.println("전혀 공격을 하지 못함..");
	}
	public String getKind() {
		return this.kind;
	}
}
class Dron extends Larba{

	public Dron() {
		super("드론");
	}
	public void attack() {
		System.out.println(getKind()+" 약한 근접 공격을 한다.");
	}
}
class Zerggling extends Larba{

	public Zerggling() {
		super("저글링");
	}
	public void attack() {
		System.out.println(getKind()+" 빠른 근접 공격을 한다.");
	}
}
profile
아자아자 화이팅
post-custom-banner

0개의 댓글