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("프로그램을 개발하는 일을 한다.");
}
}
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()+" 빠른 근접 공격을 한다.");
}
}