추상적인 개념을 만들고(예. 가구, 동물) 이 추상적인 개념으로 구체화를 하면(예. 의자, 강아지) 다형성을 만들어진다.
의자→의자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를 찾을 수 없음
}
}

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());
}
}

Share article