클래스 상속 문법
: 객체 지향 프로그래밍 언어의 중요한 특징 중 하나는 상속이다.
B 클래스가 A 클래스를 상속 받으면 B 클래스는 A 클래스의 멤버 변수와 메소드를 사용할 수 있다.
상속 받는 클래스에서 상속하는 클래스로 화살표가 가므로 방향을 헷갈리면 안된다!!
아래와 같은 방법으로 상속 코드가 구현된다. 하위 클래스가 상위 클래스의 멤버 변수를 사용할 때,
private 변수일 경우에는 사용할 수 없다. 오류가 나타나는 것을 확인할 수 있을 것이다. 따라서, private 변수를 다른 하위 클래스에서도 사용할 수 있도록 protected로 고친다면 다른 클래스에서도 사용이 가능하다.
class B extends A {
}
부모를 부르는 예약어, super
: super 예약어는 하위 클래스에서 상위 클래스로 접근할 때 사용한다. 상위 클래스의 생성자를 호출할 때도 사용된다. 하위 클래스가 생성될 때는 상위 클래스의 디폴트 생성자를 호출하는 super()가 자동으로 생성되기 때문에, 반드시 Customer()에 디폴트 생성자를 명시적으로 생성해주어야한다.
public Customer (int customerID, String customerName) {
this.customerID = customerID ;
this.customerName = customerName ;
customerGrade = "SILVER" ;
bonnusRtio = 0.01 ;
System.out.println("Customer(int, String) 생성자 호출")
}
public VIPCustomer(int customerID, String customerName, int agentID){
super(customerID, customerName) ;
customerGrade = "VIP" ;
bonnusRatio = 0.05 ;
saleRatio = 0.1 ;
}
다형성
: 다형성이란 하나의 코드가 여러 자료형으로 구현되어 실행되는 것이다. 다형성을 통해 상위 클래스에서 공통 부분의 메서드를 제공하고, 하위클래스에서는 그에 기반하여 추가 요소를 덧붙여 구현하면 코드 양도 줄어들고 유지보수도 편리하다. 코드를 통해 실습해보니 이해하기가 수월하였다.
package hello;
class Animal{
public void move() {
System.out.println("동물이 움직입니다.");
}
}
class Human extends Animal{
public void move() {
System.out.println("사람이 두발로 걷습니다.");
}
}
class Tiger extends Animal{
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
}
class Eagle extends Animal{
public void move() {
System.out.println("독수리가 하늘을 납니다.");
}
}
public class AnimalTest1 {
public static void main(String[] args) {
AnimalTest aTest = new AnimalTest();
aTest.moveAnimal(new Human());
aTest.moveAnimal(new Tiger());
aTest.moveAnimal(new Eagle());
}
public void moveAnimal(Animal animal) {
animal.move();
}
}
다운 캐스팅과 instanceof
: 상위 클래스로 형 변환되었던 하위 클래스를 다시 원래 자료형으로 형 변환하는 것을 다운 캐스팅이라고한다. 다운 캐스팅을 하기 전에 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인해야 변환할 때 오류를 막을 수 있는데, 이를 확인하는 예약어가 바로 instanceof이다.
Animal ani = aniList.get(i) ;
if(ani instanceof Human){
Human h = (Human) ani ;
h.readBook();
}
else if(ani instanceof Tiger){
Tiger t = (Tiger) ani ;
t.hunting();
}
출처: Do it! 자바 프로그래밍 입문_박은종 지음
'Java' 카테고리의 다른 글
Java_인터페이스 (0) | 2021.02.22 |
---|---|
Java_추상 클래스 (0) | 2021.02.20 |
Java_싱글톤 패턴 (0) | 2021.02.19 |
Java_생성자 (0) | 2021.02.19 |
Java_힙 메모리 (0) | 2021.02.19 |