[JAVA] 12. 상속 Ⅱ. 추상화 & 다형성

최재원's avatar
Feb 14, 2025
[JAVA] 12. 상속 Ⅱ. 추상화 & 다형성
추상적인 개념을 만들고(예. 가구, 동물) 이 추상적인 개념으로 구체화를 하면(예. 의자, 강아지) 다형성을 만들어진다.
의자→의자or가구라고 부를 수 있다
강아지→강아지or동물로 부를 수 있다
구체적인 것보다 추상적인 것에 의존해야 한다.
DIP (Dependency Inversion Principle) 의존 역전 원칙
  • 구체적인 것보다 추상적인 것에 의존해야 한다.
위 원칙을 지키면
OCP (Open-Closed Principle) 개방-폐쇄 원칙
  • 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
  • 기존 코드는 건드리지 않고 새로 추가 할 수 있다.
을 지킬 수 있다.

1. 상속에서 변수 찾기

상위클래스의 타입으로 힙에 띄운 하위클래스는 자신의 변수 접근불가❌
자신의 타입으로 힙에 띄운 하위클래스는 상위클래스의 변수 접근가능⭕
package ex05.ch02; class Animal { String name = "동물"; int i = 1; } class Dog extends Animal { String name = "강아지"; } class Cat extends Animal { String name = "고양이"; } class Bird extends Animal { String name = "새"; int age = 5; } public class ExVar01 { public static void main(String[] args) { Animal animal = new Animal(); // [Animal] System.out.println(animal.i + ", " + animal.name); Dog dog = new Dog(); // [Animal, Dog] // dog에서 부모 animal의 i에 접근가능 System.out.println(dog.i + ", " + dog.name); Animal dog2 = new Dog(); // [Animal, Dog] // dog2가 부모 animal의 메모리를 가리키면 자식 데이터 접근불가 System.out.println(dog2.i + ", " + dog2.name); Cat cat = new Cat(); // [Animal, Cat] System.out.println(cat.i + ", " + cat.name); Animal cat2 = new Cat(); // [Animal, Cat] System.out.println(cat2.i + ", " + cat2.name); Animal bird = new Bird(); // System.out.println(bird.age + ", " + bird.name); age를 찾을 수 없음 } }
notion image

2. 상속에서 메서드 찾기

package ex05.ch02; class 운동선수 { // getter public int getHp() { return 1; } // setter public void setHp(int hp) { } } class 타이슨 extends 운동선수 { int hp = 100; public int getHp() { return hp; } // context문맥 public void setHp(int hp) { this.hp = hp; } } class 맥그리너 extends 운동선수 { int hp = 200; public int getHp() { return hp; } public void setHp(int hp) { this.hp = hp; } } public class ExMeh02 { static void attack(맥그리너 u1) { u1.hp = u1.hp - 10; } static void attack(타이슨 u1) { u1.hp = u1.hp - 10; } static void attack(운동선수 u1) { u1.setHp(u1.getHp() - 10); } public static void main(String[] args) { 맥그리너 u1 = new 맥그리너(); attack(u1); System.out.println(u1.hp); 타이슨 u2 = new 타이슨(); attack(u2); System.out.println(u2.hp); 운동선수 u3 = new 타이슨(); attack(u3); attack(u3); attack(u3); attack(u3); System.out.println(u3.getHp()); } }
notion image

Share article

jjack1