📌 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();
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);
야옹이는 고양이로 사료를 먹습니다. 야옹이는 고양이로 야옹거립니다. 야옹이은(는) 고양이으로 3살 입니다.