728x90
상속(Inheritance)
- 클래스 B가 클래스 A를 상속받는다: extends 예약어 사용
class B extends A {
}
이때 상위 클래스에서 private로 선언한 변수를 하위 클래스에서 사용하고 싶은 경우: protected 예약어 사용
-> 외부 클래스에서 사용할 수 없지만 상속받은 하위 클래스에서는 public처럼 사용 가능!
private, protected 변수는 외부에서 사용하기 위해 클래스 내부에 따로 get, set 함수를 생성해둬야 함
하위 클래스 인스턴스가 생성될 때: 상위 클래스 생성자 호출 --> 하위 클래스 생성자 호출 순서!
- 예약어 super
- 하위 클래스에서 상위 클래스로 접근할 때 사용
- super가 가지고 있는 값이 상위 클래스의 주소(참조 값)
- 상위 클래스의 생성자 호출: super();
- 상위 클래스의 매개변수가 있는 생성자 호출: super(매개변수1, ...);
- 상위 클래스의 멤버 변수나 메서드를 참조: super.메서드명();
- 하위 클래스가 상위 클래스로: 묵시적 클래스 형 변환
상위클래스 인스턴스명 = new 하위클래스();
선언된 클래스형: 상위 클래스
생성된 인스턴스의 클래스형: 하위 클래스
-> 선언된 클래스형(상위 클래스)에 기반하여 멤버 변수와 메서드에 접근 가능
메서드 오버라이딩
- 상위 클래스 메서드 재정의: 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야 함
- 묵시적 클래스 형 변환과 메서드 재정의
상위클래스 vc = new 하위클래스;
vc.재정의된_메서드();
어떤 메서드를 호출? 상위 클래스의 메서드가 아닌 하위 클래스에서 재정의된 메서드를 호출
재정의된 메서드가 있을 경우: 선언된 클래스형이 아닌 생성된 인스턴스의 메서드를 호출
-> 가상 메서드
다형성
하나의 코드가 여러 자료형으로 구현되어 실행되는 것
package polymorphism;
public class Animal {
public void move() {
System.out.println("동물이 움직입니다.");
}
}
public class Human extends Animal {
public void move() {
System.out.println("사람이 두 발로 걷습니다.");
}
}
public class Tiger extends Animal {
public void move() {
System.out.println("호랑이가 네 발로 뜁니다.");
}
}
public class Eagle extends Animal{
public void move() {
System.out.println("독수리가 하늘을 납니다.");
}
}
public class AnimalTest1 {
public static void main(String[] args){
AnimalTest1 aTest = new AnimalTest1();
aTest.moveAnimal(new Human());
aTest.moveAnimal(new Tiger());
aTest.moveAnimal(new Eagle());
}
public void moveAnimal(Animal animal){
animal.move();
}
}
moveAnimal 메서드는 어떤 매개변수가 넘어와도 모두 Animal 형으로 변환됨
가상 메서드의 원리에 따라 animal.move()가 호출하는 메서드는 Animal의 move()가 아닌 넘어온 실제 인스턴스의 메서드
다운 캐스팅
상위 클래스로 형 변환되었던 하위 클래스를 다시 원래 자료형으로 형 변환하는 것
- instanceof: 상위 클래스로 형 변환된 인스턴스의 원래 자료형을 확인하는 예약어
Animal hAnimal = new Humal();
if(hAnimal instanceof Human) { // 원래 자료형이 Human형이라면
Human human = (Human)hAnimal; // 다운 캐스팅
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
자료형 String (0) | 2023.09.21 |
---|---|
ArrayList 클래스 (0) | 2023.09.18 |
객체지향 (0) | 2023.09.13 |
배열 (0) | 2023.09.13 |
조건문과 반복문 (0) | 2023.09.13 |