Is~a 상속관계
상속( is~a )
- 코드의 확장, 재활용이라는 장점을 지닌다.
- superclass는 subclass의 공통된 점을 가지고 있다.
- 상속은 클래스명 뒤에 extends 상속받을 클래스명을 붙힌다.
- 자바에서 상속은 오직 단일 상속을 원칙으로 한다 ( 인터페이스만 다중상속이 가능하다. )
- 객체에 final을 붙히면 상속관계를 만들 수 없다. ->has~a로 써야함
class A{
public void disp(){
System.out.println("Super class");
}
}
public class Day1012 extends A { // Day1012은 A클래스가 가지고 있는 걸 다 쓸 수 있다.
public void disp2(){
System.out.println("Sub class");
}
public static void main(String[]args){
Day1012 ih=new Day1012();
System.out.println(ih); // ih.toString()
ih.disp();
ih.disp2();
}
}
class A{
public A(){
System.out.println("클래스 A의 생성자");
}
}
public class Day1012 extends A {
public Day1012(){
// super();호출 -> 부모의 생성자 호출, 상속 시 자식클래스의 생성자 첫번째 라인에 항상 존재하며 subclass의 생성자보다 먼저 호출된다.
System.out.println("클래스 Day1012의 생성자");
}
public static void main(String[]args){
Day1012 ih=new Day1012(); // "클래스 A의 생성자" 다음 "클래스 Day1012의 생성자" 출력
}
}
class A{
public A(){
System.out.println("A()");
}
public A(int i){ // 오버로딩
System.out.println(i);
}
}
public class Day1012 extends A {
public Day1012(){
// super();를 명시적으로 사용해야 할때 -> superclass 생성자가 오버로딩 되었을 때
super(10);
System.out.println("Day1012()");
}
public static void main(String[]args){
Day1012 ih=new Day1012(); // 10 , Day1012() 출력
}
}