class A {
int a;
}
class B {
A test = new A();
int b;
}
Object Class
슈퍼클래스와 메소드명이 같아야한다
슈퍼클래스와 매개변수가 같아야한다
슈퍼클래스와 반환타입이 같아야한다
단 접근제한자와 예외(exception)은 제한된 조건에서 다르게 선언할 수 있음
접근제한자는 슈퍼클래스의 메소드보다 좁은 범위로 설정할 수 없다
슈퍼클래스보다 많은 예외를 선언할 수 없다
class A {
void f() throws IOException, SQLException{}
}
//올바른 사용
class B extends A{
void f() throws IOException {}
}
//error
class C extends A{
void f() throws Exception{}
}
/* Exception은 모든 예외의 조상임, 단순히 예외의 수가 아닌 범위(상속관계) 또한 고려해야함
예외처리에서는 예외의 수 뿐만아니라 범위또한 고려해야한다.
인스턴스 메소드를 static 메소드로 변경할 수 없다. 반대또한 마찬가지
class sup{
void testF() {
System.out.println("parrent");
}
}
class sub extends sup{
//overriding
void testF() {
System.out.println("Override");
}
//overloading
void testF(int a) {
System.out.println("Overload");
}
//error
int testF() {
System.out.println("error");
return 1;
}
}
class A {
int a;
int b;
}
class B extends A {
int b;
//모두 슈퍼클래스의 a를 참조
a;
this.a;
super.a;
//서브 클래스의 b를 참조
b;
this.b;
//super 클래스의 b를 참조
super.b;
}
무야호