본문 바로가기

FALL in/G.MA' s 자바

오버라이딩


상속과 오버라이딩


클래스를 상속받는다는 것은 부모클래스의 속성이나 기능을 전달받는다는 것이다. 하위 클래스(자식)이 상위 클래스 (부모)를 상속받아 쓸수있다.

extends 키워드를 사용하면된다.

상속을 받아서 오버라이딩 즉, 메소드재정의가 가능하다. 

상위클래스에 있는 메소드를 하위클래스에서 새롭게 정의하여 사용가능하다. 

하위클래스에서 상위클래스의 멤버변수의 접근도 할수있다.


상속은 하나의 상위클래스만 받을수있다. 자바에서 다중상속은 불가능하다.

따라서 extends 키워드에 클래스는 하나만 쓸수있다.




class A {

int n_a = 1;


void F() {

System.out.println("class A");

System.out.println("n_a = " + n_a);

}

}


class B extends A { //A를 B가 상속받음. 

int n_b = 3; 


void F() { // A클래스의 메소드 오버라이딩(재정의).

System.out.println("class B");

System.out.println("n_a = " + n_a); // A클래스의 멤버변수에 접근가능. 


}


void F2() {

System.out.println("n_b = " + n_b);

}

}


class C extends B { //A를 상속받은 B를 C가상속받음 

void F() { //B가 상속받은 A의 메소드 오버라이딩(재정의).

n_a = 10; // A클래스의 멤버변수에 접근가능. 

System.out.println("class c");

System.out.println("n_a = " + n_a);

}


void F2() { //B클래스의 메소드 오버라이딩(재정의).

n_b = 20;// B클래스의 멤버변수에 접근가능. 

System.out.println("n_b = " + n_b);

}

}


public class overridingEx {

void Line() {

System.out.println("------------------------");

}


public static void main(String[] args) {

overridingEx or = new overridingEx();

A a = new A();

B b = new B();

C c = new C();


a.F();

or.Line();


b.F();

b.F2();

b.n_a = 0; //상속받은 A클래스의 멤버변수 접근. 

b.F();

or.Line();


c.F();

c.F2();


}

}

 

위 코드를 보면 C는 B를 상속받았지만 B가 상속받은 클래스인 A와 B모두 이용가능히다. 


참고. 하나의 자바파일안에서는 public클래스는 하나만 만들 수있다. 컴파일러가 public class를 찾아 작업하기 쉽도록 하기위함이다.


결과화면

class A

n_a = 1

------------------------

class B

n_a = 1

n_b = 3

class B

n_a = 0

------------------------

class c

n_a = 10

n_b = 20



'FALL in > G.MA' s 자바' 카테고리의 다른 글

익명내부클래스  (0) 2016.04.12
인터페이스와 다중상속  (0) 2016.04.12
추상클래스와 추상메소드  (0) 2016.04.12
오버로딩  (0) 2016.04.12