상속 (inheritane)
- 부모클래스: 상위클래스, 슈퍼클래스
- 자식클래스: 하위클래스, 서브클래스
01. 개념 : 부모의 멤버를 상속받아 자식이 쓸수 있게 해준다.
02. 목적 : 코드의 중복, 효율적으로 개발하여 작업 시간을 줄여준다.
03. 예외적인 항목
부모 클래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없습니다.
부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없습니다.
(default 접근 제한은 ‘같은 패키지에 있는 클래스’만 접근이 가능하게끔 하는 접근 제한자이기 때문입니다.)
그 이외의 경우는 모두 상속의 대상이 됩니다.
04. 상속 방법
: 상속받고자 하는 자식 클래스명 옆에 extends 키워드를 붙이고, 상속할 부모 클래스명을 적습니다. 자바는 다중 상속을 허용하지 않으므로, extends 뒤에는 하나의 부모 클래스만 와야 합니다.
-- 클래스 만들기
package inheritance;
public class Super { // 상위클래스, 부모클래스, super클래스
int a;
double b;
void disp() {
System.out.println("a="+a);
System.out.println("b="+b);
}
}
package inheritance;
public class Sub extends Super{ //하위 클래스, 자식클래스, sub클래스
// : class대 class extends 단일상속
int c;
double d;
void display() {
System.out.println("c"+c);
System.out.println("d"+d);
}
}
package inheritance;
public class Sub02 extends Super{
int e;
}
-- 활용 예제
package inheritance;
public class ExtendsTest01 {
public static void main(String[] args) {
Sub sub=new Sub(); //1. 변수 선언
// System.out.println("c: "+sub.c); // sub 프로젝트에서 정보 가지고 올 수 있다.
// System.out.println("d: "+sub.d); // 단 private 는 가지고 올 수 없음
sub.display(); // sub display 는 public 이므로 가지고 올 수있다.
sub.disp();
System.out.println("a= "+sub.a);
System.out.println("b= "+sub.b);
System.out.println("---------");
Sub02 sub2=new Sub02();
System.out.println("e= "+sub2.e);
System.out.println("super a:"+sub2.a);
System.out.println("super b:"+sub2.b);
sub2.disp();
}
}
관련 참고 링크
https://chanhuiseok.github.io/posts/java-1/
자바(JAVA) - 상속(Inheritance) (1) 클래스 상속, 부모 생성자의 호출
상속이란?
chanhuiseok.github.io
https://tlo-developer.tistory.com/97
Chapter 06. 상속 _ 프로그래밍 01
[쉽게 배우는 자바 프로그래밍] Chapter 06. 상속 프로그래밍 문제 1. 다음 표와 실행 결과를 참고해 자식 클래스인 Circle과 ColoredCircle을 작성하시오. 그리고 Circle과 ColoredCircle 객체의 show() 메서드를
tlo-developer.tistory.com
* 예제 02.
- super
package inheritance;
public class Animal {
int a;
public Animal() {// 초기화 담당
System.out.println("Animal 클래스의 생성자 실행");
}
}
- sub 1
package inheritance;
public class Reptile extends Animal { //is a relationship
int b;
//상속관계가 구현된 자식 클래스의 생성자 첫 줄에는 super() 가 기본적으로 생략이 되어있음
//super(); -> 부모의 기본생성자를 뜻함
public Reptile() {
super();
System.out.println("Reptile 클래스의 생성자 실행");
}
// 생성자 오버로딩
// 기본적으로 super(); 생략이 되어있으나, this(); 를 명시하면 super();는 무효화됨
public Reptile(int b) {
this();
System.out.println(b+" Reptile 클래스의 생성자 실행");
}
}
- sub 2
package inheritance;
public class Memmal extends Animal { //is a relationship
int c;
public Memmal() { // 초기화 담당
super(); // 가 생략이 되어있음
System.out.println("Memmal 클래스의 생성자 실행");
}
}
- main
package inheritance;
public class ExtendTest02 {
public static void main(String[] args) {
//애니멀 객체 만들기 1. 변수 선언
//Animal animal=new Animal(); // 2. 메모리 할당
//"Animal 클래스의 생성자 실행" 이 뜸
//Reptile 객체 만들기
Reptile reptile = new Reptile();
// 'Animal 클래스의 생성자 실행' 이 뜸
// 'Reptile 클래스의 생성자 실행' 이 뜸
System.out.println("---------");
//Memmal 객체 만들기
Memmal memmal = new Memmal();
// 'Animal 클래스의 생성자 실행' 이 뜸
// 'Reptile 클래스의 생성자 실행' 이 뜸
System.out.println("---------");
Reptile reptile2 = new Reptile(10);
// 'Animal 클래스의 생성자 실행' 이 뜸
// 'Reptile 클래스의 생성자 실행' 이 뜸
// '10 Reptile 클래스의 생성자 실행' 이 뜸
}
}
reptile2의 경우 해당 생성자에 this 가 있기에, reptile 이 먼저 실행되고, repile 의 (b+"retile~") 이 실해됨
- 출력창
Animal 클래스의 생성자 실행
Reptile 클래스의 생성자 실행
---------
Animal 클래스의 생성자 실행
Memmal 클래스의 생성자 실행
---------
Animal 클래스의 생성자 실행
Reptile 클래스의 생성자 실행
10 Reptile 클래스의 생성자 실행
예제 03. 상속의 상속
Animal > Memmal > Dog
package inheritance;
public class Animal {
int a=10;
public Animal() {// 초기화 담당
System.out.println("Animal 클래스의 생성자 실행");
}
}
package inheritance;
public class Memmal extends Animal { //is a relationship
int c=30;
public Memmal() { // 초기화 담당
super(); // 가 생략이 되어있음 // 첫줄에만 허용
System.out.println("Memmal 클래스의 생성자 실행");
}
}
package inheritance;
public class Dog extends Memmal{
int d= 40;
public Dog() {
//memmal 생성자 생략
//memmal 은 animal 자식임
System.out.println("Dog 클래스의 생성자 실행");
}
}
- main
package inheritance;
public class ExtendTest03 {
public static void main(String[] args) {
// 자식 객체를 생성시키면, 부모 객체가 먼저 생성되고 자식객체도 생성된다.
Dog dog = new Dog();
// super 생략
}
- 출력
Animal 클래스의 생성자 실행
Memmal 클래스의 생성자 실행
Dog 클래스의 생성자 실행
'JAVA _기초' 카테고리의 다른 글
[JAVA] Inheritance : 상속_03 (0) | 2023.02.23 |
---|---|
[JAVA] Inheritance : 상속_02 (0) | 2023.02.22 |
[JAVA] Exceptions: 예외 (0) | 2023.02.20 |
[JAVA] 자바의 Enum, 열거형 이란 (0) | 2023.02.17 |
[JAVA] 문자열 (String) (0) | 2023.02.15 |