Test109 상속(Inheritance) / 메소드 오버라이딩(mathod Overriding)의 특징
※ 메소드 오버라이딩(mathod Overriding)의 특징
- 메소드 이름, 리턴타입, 파라미터 수나 타입이 완전히 일치해야 한다.
- 반드시 상속 관계가 있어야 한다.
- 재정의된 하위 클래스의 메소드 접근제어지시자는 상위 클래스의 메소드 접근제어지시자보다 범위가 크거나 같아야 한다.
예를 들어 상위 클래스 메소드의 접근제어지시자가 『protected』 인 경우
하위 클래스가 이 메소드를 오버라이딩(Overriding)하는 경우
접근제어지시자는 『protected』 또는 『public』 이어야 한다.
- 『static』, 『final』, 『private』 메소드는 오버라이딩(Overriding)할 수 없다.
- Exception 의 추가가 불가능하다.
즉, 상위 클래스의 메소드가 가지고 있는 기존 예외 사항에 새로운 Exception 을 추가하는 것은 불가능하다는 것이다.
※ 자식은 부모가 누군지 아는데 부모는 자식이 누군지 모른다.
자식 : 하위 클래스
부모 : 상위 클래스
// 상위 클래스, 부모 클래스, Super class
SuperTest03.java
class SuperTest03
{
private int a=5;
protected int b=10;
public int c=20;
public void write()
{
System.out.println("Super write() 메소드 : " + a + " : " + b + " : " + c);
}
}
// 하위 클래스, 자식 클래스, Sub class
SuperTest03.java
class SubTest03 extends SuperTest03
{
protected int b=100;
public void print()
{
//System.out.println("Sub print() 메소드 : " + a + " : " + b + " : " + c);
//System.out.println("Sub print() 메소드 : " + b + " : " + c);
//--==>> Sub print() 메소드 : 100 : 20
//-- 슈퍼 클래스에서 선언된 a 때문에 접근할 수 없다.
// → private 변수이기 때문에
System.out.println("Sub print() 메소드 : " + super.b + " : " + c);
//--==>> Sub print() 메소드 : 10 : 20
//-- 슈퍼 클래스에서 선언된 b 에 접근하기 위해서는
// 『super』 키워드를 사용하면 가능하다.
System.out.println("Sub print() 메소드 : " + c);
System.out.println("Sub print() 메소드 : " + super.c);
System.out.println("Sub print() 메소드 : " + this.c);
//--==>> Sub print() 메소드 : 20
// Sub print() 메소드 : 20
// Sub print() 메소드 : 20
//-- 슈퍼 클래스에서 선언된 c 에 접근하기 위해서는
// 아무런 제약과 제한이 없다.
}
@Override
public void write()
{
//.out.println("Sub write() 메소드 : " + a + " : " + b + " : " + c);
System.out.println("Sub write() 메소드 : " + b + " : " + c);
//--==>>Sub write() 메소드 : 100 : 20
//-- 슈퍼 클래스에서 선언된 a 때문에 접근할 수 없다.
// → private 변수이기 때문에
}
}
// main() 메소드를 포함하는 외부 클래스
Test109.java
public class Test109
{
public static void main(String[] args)
{
// 하위 클래스(SubTest03) 인스턴스 생성
SubTest03 ob = new SubTest03();
ob.print();
ob.write();
System.out.println("---------------------------- 구분선");
((SuperTest03)ob).write(); //-- check~!!
//--==>> Sub write() 메소드 : 100 : 20
System.out.println(ob.b);
//--==>> 100
System.out.println(((SuperTest03)ob).b); //-- check~!!
//--==> 10
// ※ 슈퍼 부름
// 메소드와 변수를 꼭 구분하여 정리할 것~!!!
}
}
cmd
Sub print() 메소드 : 10 : 20
Sub print() 메소드 : 20
Sub print() 메소드 : 20
Sub print() 메소드 : 20
Sub write() 메소드 : 100 : 20
---------------------------- 구분선
Sub write() 메소드 : 100 : 20
100
10
계속하려면 아무 키나 누르십시오 . . .
'Study Note > Java' 카테고리의 다른 글
JAVA_ Test111_ 상속 관계에 있는 클래스들 간의 캐스팅 / 업 캐스팅, 다운 캐스팅 (0) | 2018.06.15 |
---|---|
JAVA_ Test110_ 추상 클래스(Abstract) (0) | 2018.06.15 |
JAVA_ Test107_ 클래스 / 상속(Inheritance) / 생성자와 클래스 상속간의 관계 /『super』정의 / @Override (0) | 2018.06.14 |
JAVA_ Test106_ 클래스 / 상속(Inheritance) 개요 / 『protected』 / extends (0) | 2018.06.14 |
JAVA_ Test105_ 정렬(Sort) 알고리즘) / 점수가 높은 순으로 등수 결과를 출력하는 프로그램 (0) | 2018.06.14 |
댓글