public class Penguin extends Animal{
public String habitat;
public void showHabitat() {
System.out.printf("%s는 %s에 살아\n", name, habitat);
}
}
public class Animal {
public String name;
public void showName() {
System.out.println("안녕 나는 " + name + "야. 반가워.");
}
}
- 실행 코드
public class Driver {
public static void main(String[] args) {
Penguin pororo = new Penguin();
pororo.name = "뽀로로";
pororo.habitat = "남극";
pororo.showName();
pororo.showHabitat();
Animal pingu = new Penguin();
pingu.name = "핑구";
// pingu.habitat = "EBS";
pingu.showName();
// pingu.showHabitat();
// Penguin happyfeet = new Animal();
}
}
Penguin pororo = new Penguin();
- Penguin 클래스의 인스터스만 힙 영역에 생긴 것이 아니라
- Aniaml 클래스의 인스턴스로 함께 힙 영역에 생긴다.
- 사실 Animal 인스턴스 외에도
모든 클래스의 최상위 클래스인 Object 클래스의 인스턴스
도 함께 생성된다.
Animal pingu = new Penguin();
- pingu 객체 참조 변수는 Penguin 인스턴스가 아니라 Animal 인스턴스를 가리킵니다.
- 해당 참조변수는
Animal
타입으로서,pingu
는Penguin
의 특성 메서드나 속성에 접근할 수 없습니다.
형변환
pingu
객체 참조 변수는Penguin
의 특정 메서드나 속성에 접근하려면 형변환이 필요합니다.
- 종류
- 명시적 형변환
- 큰 범주의 데이터타입에서 작은 범주의 데이터타입으로 변환하는 경우 개발자가 직접 명시해줘야합니다
Penguin
happyfeet
= (Penguin) new Animal();
- 일단 서브 클래스의 데이터가 추가된 경우에
슈퍼 클래스를 인스턴스가 해당 데이터를 사용하는 경우 에러가 발생합니다.
- 왜냐하면 슈퍼 클래스에서는 해당 데이터를 가지고 있지 않기 때문입니다.
- 암묵적 형변환
- 프로그래밍 언어가 자동으로 수행하는 데이터 타입 변환
- 작은 범주의 데이터 타입에서 큰 범주의 데이터타입으로 변환할 때 동작합니다
- 이는 데이터의 손실의 위험이 없기 때문에 가능한 행위입니다.
- 명시적 형변환
뜬금없는 코드의 가독성 설명
- 코드의 가독성
- 코드가 객체지향적으로 설계되어있다면, 인간의 언어로 쉽게 번역될 수 있어야 합니다.
- 이렇게 작성된 코드는 다른 개발자들이 읽기쉽고, 유지 보수성도 높아집니다
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[3단원]다중 상속과 자바 (0) | 2023.08.25 |
---|---|
[3단원]상속과 인터페이스 (0) | 2023.08.25 |
[3단원]다형성: 사용편의성 (0) | 2023.08.25 |
[3단원]상속은 is a 관계를 만족해야 한다? (0) | 2023.08.25 |
[3단원]클래스 멤버 vs. 객체 멤버 = static 멤버 vs. 인스턴스 멤버 (0) | 2023.08.22 |