클래스 상속하기 inheritance

sehwa!·2023년 9월 4일
0

Java

목록 보기
8/18

📌 class 상속하기
extends를 사용하여 상속

public class A {}
public class B extends A {}

B(상속클래스)는 A(피상속클래스)를 상속받음
클래스를 지정하지 않을 경우 최상위의 Object 클래스를 상속받음
자식클래스에서 부모클래스의 변수이름과 동일한 이름의 변수를 선언할수 있음

📌 super() 생성자
상속클래스는 자신의 다른 생성자 혹은 부모생성자를 꼭 호출해야함
해당 생성자의 첫줄에는 super(); 꼭!!! 작성해야한다.

// 자신의 다른 생성자
public SmartTv() {
	super("기본 생성자 Tv");
}
// 부모생성자 
public SmartTv(String name) {
	super(name);
}

super()는 부모생성자를 불러오는 것
this()super()는 static 메소드에서 사용 불가

✅ 수업예문

1. TV 와 SmartTV

💻 code

public class Tv 피상속클래스

protected String name;
protected boolean power;
protected int channel;
📍 생성자만들기
public Tv(String name) {
	this.name = name;
}
📍 메소드만들기
// TV on & off
public void power() {
	power = !power;
}
// 채널올리기
public int channelUp() {
	return ++channel;
}
// 채널내리기
public int channelDown() {
	return --channel;
}

public class SmartTv extends Tv 상속클래스

boolean isInternet;
📍 생성자 만들기
public SmartTv() {
	super("기본 생성자 Tv");
}
public SmartTv(String name) {
	super(name);
}
📍 메소드 오버라이딩
@Override
public void power() {
	power = !power;
	if(power) {
		isInternet = true;
	}
}
📍 메소드 추가하기
public void internet() {
	System.out.println("인터넷 연결중...");
}
public void movieInfo() {
	System.out.println("요청 영화 정보 검색중...");
}

public class SmartTvTest 메인메소드

SmartTv tv = new SmartTv("우리집 TV");
tv.power();
tv.channel = 11;
System.out.println(tv.channelDown());
tv.internet();

👉 print

10
인터넷 연결중...

📃 실습 01

1. 상속과 오버라이딩 구현하기

💻 code

public class Animal 부모클래스

private String name;
private String type;
private int age;
private String sound;
📍 getter and setter
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public String getType() {
    return type;
}
public void setType(String type) {
	this.type = type;
}
public int getAge() {
	return age;
}
public void setAge(int age) {
	this.age = age;
}
public String getSound() {
	return sound;
}
public void setSound(String sound) {
	this.sound = sound;
}
📍 부모 메소드
public void eat(String food) {
	System.out.println(name + "은(는) " + type + "(으)로 " + food + "을(를) 먹습니다.");
}
public void cry() {
	System.out.println(name + "은(는) " + type + "(으)로 " + sound + "웁니다.");
}
📍 부모 생성자
public Animal() {}
public Animal(String name, String type, int age, String sound) {
	this.name = name;
	this.type = type;
	this.age = age;
	this.sound = sound;
}
📍 toString() 오버라이딩
@Override
public String toString() {
	return name + "은(는) " + type + "입니다."; 
}

public class Cat extends Animal 자식클래스

📍 생성자
public Cat (String name, String type, int age, String sound) {
	super(name, type, age, sound);
}
📍 오버라이딩

🚫 super에서 가져온 값이어서 super로 출력해줌

@Override
public void eat(String food) {
	System.out.println(super.getName() + "는 " + super.getType() + "로 " + food + "를 먹습니다.");
}
@Override
public void cry() {
	System.out.println(super.getName() + "는 " + super.getType() + "로 " + super.getSound() + "거립니다.");
}	
@Override
public String toString() {
	return super.getName() + "은(는) " + super.getType() + "으로 " + super.getAge() + "살 입니다."; 
}

public class AnimalTest main메소드

Cat navi = new Cat("야옹이", "고양이", 3, "야옹");
navi.eat("사료");
navi.cry();
System.out.println(navi);

👉 print

야옹이는 고양이로 사료를 먹습니다.
야옹이는 고양이로 야옹거립니다.
야옹이은(는) 고양이으로 3살 입니다.

0개의 댓글