본문 바로가기
Study Note/Java

JAVA_ Test109_ 상속(Inheritance) / 메소드 오버라이딩(mathod Overriding)의 특징

by 시뮝 2018. 6. 15.
728x90


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

계속하려면 아무 키나 누르십시오 . . .







728x90

댓글