상속
public class SampleParent {
String var;
{
var = "초기화 블럭은 돌려주지 않는다.";
}
SampleParent(){
var = "생성자도 물려주지 않는다.";
}
int method(int x, int y){
return x + y;
}
}
public class SampleChild extends SampleParent {
void childMethod(){
System.out.println(var); //상속받은 변수
System.out.println(method(7,13)); //상속받은 메서드
}
오버라이딩
//오버라이딩 : 상속받은 메서드의 내용을 재정의 하는 것 @Override //어노테이션 : 클래스, 변수, 메서드 등에 표시해 놓는 것 int method(int x, int y){ //부모클래스와 리턴타입, 메서드 , 파라미터 전부 다 똑같이 적고 return x * y; //내용만 다르게 }
super
super()
//super, super()
int var;
void test(double var){
System.out.println(var); //지역변수
System.out.println(this.var); //인스턴스 변수
System.out.println(super.var); //부모 클래스의 인스턴스 변수
//super : 부모 클래스의 멤버와 자식클래스의 멤버가 이름이 중복될 때 둘을 구분하기 위해 사용한다.
System.out.println(this.method(10, 20)); //내가 만든 메서드
System.out.println(super.method(10, 20)); //부모 클래스에서 상속받은 메서드
}
SampleChild(){
super(); //부모 클래스의 생성자 호출
//super()를 통해 클래스의 생성자를 호출하고 부모클래스의 인스턴스 변수도 초기화한다.
//super()가 없으면 컴파일러가 자동으로 super()를 넣어준다.
}
다형성
public static void main(String[] args) {
SampleChild sc = new SampleChild(); //변수와 객체의 타입이 같음
SampleParent sp = new SampleChild(); //변수와 객체의 타입이 다를 수 있다. (변수와 객체의 타입이 상속관계에 있어야 가능)
//SampleChild2
//SampleChild3
//SampleParent : 멤버 2개
//SampleChild : 상속받은 멤버 2개 + 4개 = 6개
//sc = sp; //형변환 생략안됨
sc = (SampleChild)sp; //자식 타입으로 형변환해야함
//부모 -> 자식클래스는 자동 형변환 되지 않는다.
sp = sc; //자동 타입 변환 : 형변환이 생략, 자식 -> 부모클래스는 자동 형변환이 가능하다.
}