2024-11-01





야옹야옹~~~
야옹야옹~~~
package polymorphism;
/*
* 다형성(polymorphism)?
* - 객체지향 프로그램의 4대 특징 중 하나.
* ==> 상속과 연관성이 많음.
* - 다형성의 사전적 의미.
* ==> 같은 종의 생물이지만 모습이나 특징이 고유의
* 성질을 가지고 있는 것을 말함.
* - 여러가지 모습으로 해석될 수 있는 형태를 말함.
* - 여러가지 형태를 가질 수 있는 능력을 말함.
* - 하나의 메서드나 클래스가있을 때 이것들이 다양한 방법으로
* 동작하는 것.
* - 하나의 사물(객체)을 다양한 타입으로 선언하고 이를
* 이용할 수 있는 성질.
* ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
* - 하나의 참조변수로 여러 타입의 객체를 참조할 수 있는 것.
* ==> 조상타입의 참조변수로 자손타입의 객체를 다룰 수 있는
* 것이 다형성의 특징. 단, 조상클래스에서 상속을 받은
* 멤버들에만 접근할 수 있고, 자손클래스에서 만들어진
* 멤버들에는 접근할 수 없음.
* 예) 조상타입의 참조변수로 자식의 멤버를 호출.
* ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
* - 조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있지만,
* 반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조를 할
* 수는 없음.
* - 다형성을 사용하는 이유.
* 1. 상속과 메서드 재정의를 활용하여 확장성있는 프로그램을
* 만들 수 있음.
* 2. 상위클래스에서는 공통적인 부분을 제공하고, 하위클래스
* 에서는 각 클래스에 맞는 기능 구현.
* 3. 여러 클래스를 하나의 타입(상위클래스)으로 핸들링
* 할 수 있음.
*/
public interface Animal {
void sound();
}
package polymorphism;
public class Animal1 {
void sound() {
System.out.println("소리를 냅니다.");
}
}
package polymorphism;
public class Cat implements Animal {
@Override
public void sound() {
System.out.println("야옹야옹~~~");
}
void prn() {
System.out.println("출력 메세지입니다.!!!");
}
}
package polymorphism;
public class Tiger extends Animal1 {
@Override
void sound() {
System.out.println("어흥어흥~~~");
}
}
package polymorphism;
public class Animal_01 {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sound();
System.out.println();
// 다형성을 이용하여 객체 생성
Animal animal = new Cat(); // 업 캐스팅 ==> Cat class 객체 생성
animal.sound();
//animal.prn(); // 자식클래스의 메서드는 다형성 불가능
//Cat cat = new Animal();
//Tiger tiger = (Tiger)new Animal1(); // 다운 캐스팅
// 보모클래스가 자식클래스 보다 크기 떄문에 형 변환"(Tiger)" 해야 함.
/*
* 다운 캐스팅 : 조상타입의 참조변수를 자손타입의 참조변수로 변환하는 것.
* 반드시 형변환(casting)을 해주어야 함.
* 업 캐스팅 : 자손타입의 참조변수를 조상타입의 참조변수로 변환하느 것.
* 형변환(casting)을 안 해주어도 됨.
*/
}
}'Java > 기초 내용 정리' 카테고리의 다른 글
| Java(Class2)_Polymorphism_03 (0) | 2024.11.01 |
|---|---|
| Java(Class2)_Polymorphism_02 (0) | 2024.11.01 |
| Java(Class2)_Exam_03 (0) | 2024.10.31 |
| Java(Class2)_Exam_02 (0) | 2024.10.31 |
| Java(Class2)_Exam_01 (0) | 2024.10.31 |