상속의 정의와 예제를 통한 이해Backend/java2018. 8. 8. 19:24
Table of Contents
반응형
Is a 관계 ( 상속관계 )// 사전 조건 Animal은 최상위 부모 클래스 이다// Dog는 Animal의 자식 클래스이다. 모든 객체의 DataType은 부모가 될 수 있다. Animal d1 = new Dog(); 가능하다 .// 이말은 데이터의 접근이 d1 ( Animal 영역에서만 ) 가능: 주소가 부모 Type일 때 이렇다. -->접근할 수 있는 영역이 제한된다( 자식 클래스 접근 x ) Dog d2 = new Animal() ; 불가능하다 , Animal은 Dog이다 . 상속을 부여하면 하나의 부모 타입으로 두 개의 데이터 타입(자식한테)을 설정할 수 있다. 부모클래스 변수 = new 자식클래스(); 메모리 자체에는 자식클래스 까지 올라오지만 가르키는 곳은 부모클래스로 제한되어 있기 때문에 자식클래스에 관해서는 접근하지 못한다.캐스팅 할 수 있는 또 다른 방법 :((Animal)d).kind : ((부모클래스)하위클래스).kind 일 경우 부모클래스 캐스팅 가능package day08;public class Dog extends Animal { // 딱 하나의 클래스만을 상속 받을수 있다. 자바는 단일 상속만을 상속 받을 수 있다.// 인터페이스에서만 다중 상속을 받을 수 있다.Animal a = new Animal(); // 부모클래스 Animal에 대한 인스턴스 변수를 선언해 주었다.String kind = "강아지 종류"; // 멤버변수 , 전역변수로써 문자열 타입의 kindString name ; // 멤버변수 , 전역변수로써 문자열의 namevoid Print(){System.out.printf("%s %s", kind , name);// this가 생략되어 있기 때문에 여기서는 "강아지 종류" , null 값 출력// super.kind , super.name 은 "동물의 종류 " , null 값 출력// super.kind가 나오는 이유는 부모 클래스에 kind가 "동물의 종류"로 정의 되어 있기 때문}Dog d = new Dog();// 상속을 받은 Dog가 메모리에 올라 갈때 ,// Animal의 클래스가 먼저 메모리에 올라가고 ( 동물의 종류 )// 그 다음에 Dog 클래스가 메모리에 올라간다. ( 강아지의 종류 )// 명시적으로 , Dog 클래스에는 기본 생성자가 있는데 Super가 생략되어 있기 때문에 Animal클래스를 먼저 갔다 온다 .// super = 부모의 기본 생성자를 호출하겠다. 부모 클래스 갔다가 다시 돌아온다 .// 결론적으로 Dog 의 인스턴스 d는 Animal의 주소값을 가르키게 된다.// 고로 d는 Animal 주소값과 , Dog 주소값 둘다 가르키게 될 수 있다.// 엑세스 할 때는 하단부 부터 상단으로 , 하단부 부터 올라가는데 하단부에 선언되어 있는 값이 없다면 상단부 엄마 클래스로 올라간다.// d.name 은 null값으로 , d.kind 는 "강아지 종류" 출력된다.// this 의 형태는 하단부 --> 상단부// 그렇기 때문에 super라는 함수가 나오게 되었는데 super.kind = "동물의 종류"가 출력된다.// static 영역에서는 super , this 사용못한다 .// 상속의 deep 가능하다.}
반응형
'Backend > java' 카테고리의 다른 글
this 와 Super의 차이점 (0) | 2018.08.08 |
---|---|
생성자의 정의와 특징2 (0) | 2018.08.08 |
java 프로젝트가 다를 경우 어떻게 import 하나?? (0) | 2018.08.08 |
메소드를 구현해보자 _연습문제 (0) | 2018.08.07 |
클래스_구현하기_연습문제_답 (0) | 2018.08.07 |
@IT grow. :: IT grow.
#IT #먹방 #전자기기 #일상
#개발 #일상