JAVA

상속(inherence)- extends, super();

zkzk7290 2024. 9. 23. 21:02
반응형

상속 : 한 클래스의 속성과 메서드를 다른 클래스가 물려받는 것
- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 코드의 재사용성중복을 제거(프로그램의 생산성 향상)

== 상속 구현 방법 ==

: extends 키워드를 사용하여 구현 (확장하다)(일반 클래스, 추상 클래스)

 

 super();  : 자식 클래스의 기본 생성자는 사용자 정의 생성자가 없더라도 super() 부모 클래스 생성자 호출 키워드가 정의되어 있음(생략)
부모 클래스의 생성자를 가지고 오기 때문에 기본 생성자 또는 사용자 정의 생성자의 형태 그대로를 사용

 

 명칭 -<extends >사용 
상속해주는 클래스(Parent) - 조상, 부모, 상위, 기반, 슈퍼 클래스
상속 받는 클래스(Child) - 자손, 자식, 하위, 파생, 서브 클래스

상속에서의 생성자
: 상속받은 클래스에서 생성자 호출 순서
>> 부모 - 자식 순서로 진행
자식 클래스의 객체를 생성할 때, 자식클래스는 자식 생성자를 통해 자식 객체를 생성
자식 클래스의 생성자 호출 시 항상 부모 클래스 생성자를 호출
>> 직접적으로 정의된 생성자 호출이 필요하지 X

 

extends사용해서 상속에 관한 기본적인 예시 

주석도 꼼꼼히 !!!

/ == 동물 클래스 ==
class Animal {
	String name;
}

// Dog 자식 클래스는 Animal 부모 클래스의 상속을 받음
class Dog extends Animal {
	// 부모 클래스의 속성과 메서드를 모두 상속 받음
	// String name;
	
	void bark() {
		System.out.println("강아지가 짖습니다.");
	}
}

// == 상속 예시 ==
class Tv {
	boolean power; // 전원 상태(on/off)
	int channel; // 채널
	
	void power() { power = !power; }
	
	void channelUp() { ++channel; }
	void channelDown() { --channel; }
}

class SmartTv extends Tv {
	boolean ott; // ott 플랫폼 전원 상태(on/off) false로 기본값 설정 됨 
	
	void displayOtt(String platform) {
		if (ott) {
			System.out.println(platform);
		} else {
			System.out.println("OTT 연결이 되지 않았습니다.");
		}
	}
}

public class Inheritance {
	public static void main(String[] args) {
		Dog choco = new Dog();
		choco.name = "초코";// 인스턴스화 
		System.out.println(choco.name); 
		
		System.out.println("==========");
		SmartTv stv = new SmartTv();
		stv.channel = 10;
		stv.channelUp();//11
		stv.channelUp();//12
		stv.channelUp();//13
		System.out.println(stv.channel); // 13
		
		stv.displayOtt("Netflix"); // OTT 연결이 되지 않았습니다.
		stv.ott = true;//f->t로 변경 
		stv.displayOtt("Netflix"); // Netflix
	}	
}

 

super(); 에 대한 예제  주석 도 꼼꼼히 읽어주세요 

class Mammal {
	String name = "Parent";
	int number =10;
	
	Mammal() {
		System.out.println("빈 부모 생성자 - 인스턴스 생성");
	}
	
	Mammal(String name) {
		// Mammal 클래스로 생성되는 각 객체(this)
		this.name = name;
	}
	
	void displayMammal() {
		System.out.println(name);
	}
}

class Cat extends Mammal {
	String name = "Child";
	
	Cat() {
		// super();
		System.out.println("빈 자식 생성자");
	}
	
	Cat(String name) {
		super(name); // 부모 클래스를 가리킴
		
//		this.name = name;
		System.out.println("자식 클래스가 생성되었습니다.");
	}
	
	// 인스턴스 메서드
	void greet() {
		// 해당 클래스가 가진 인스턴스 변수에 접근 this (생략 O)
		System.out.println("자식: " + this.name);
		
		// 부모 클래스가 가진 인스턴스 변수에 접근 super (생략 X)
		System.out.println("부모: " + super.name);
	}
}
public class Inheritance02 {
	public static void main(String[] args) {
		Cat voidCat = new Cat();
		Cat myCat = new Cat("choco");
		
		voidCat.greet();
//		자식: Child
//		부모: Parent
		
		myCat.greet();
//		자식: Child
//		부모: choco
		myCat.displayMammal(); // choco
		
		Cat numberCat = new Cat();
		numberCat.number = 5;
	}
}
반응형