1. 개요
다형성은 캡슐화와 상속에 이어 객체지향의 세 번째 주요 특징입니다.
예를 들어, 인생에서 달리는 동작, 새끼 고양이, 강아지, 코끼리는 다르게 달립니다. 또 다른 예는 비행의 움직임입니다. 곤충, 새, 비행기도 다르게 날아갑니다. 동일한 행동이 다른 사물을 통해 다른 형태로 나타날 수 있음을 알 수 있습니다. 다형성은 이 상태를 설명합니다.
다형성:
은 동일한 동작이 여러 가지 다른 형태로 나타나는 것을 의미합니다.
전제조건 [핵심사항]
1. 상속 또는 구현 [둘 중 하나 선택]
2. 메소드 재작성 [의미: 재작성 없음, 의미 없음]
3. object [형식 반영]
무료 온라인 학습 영상 추천 : java video
2. 다형성 발현
다형성 발현 형식 :
父类类型 变量名 = new 子类对象; 变量名.方法名();
부모 클래스 유형 : 자식 클래스가 상속받은 부모 클래스를 의미 객체 유형 또는 구현된 상위 인터페이스 유형.
코드는 다음과 같습니다.
Fu f = new Zi(); f.method();
다형성을 사용하여 메소드를 호출할 때 먼저 해당 메소드가 상위 클래스에 존재하는지 확인하십시오. 존재하지 않으면 컴파일 오류가 발생합니다. 하위 클래스가 실행됩니다.
코드는 다음과 같습니다.
상위 클래스 정의:
하위 클래스 정의:
테스트 클래스 정의:
3. 다형성의 이점
실제 개발 과정 메소드에서는 상위 클래스 유형을 메소드 형식 매개변수로 사용하여 하위 클래스 객체를 메소드에 전달하고 메소드를 호출하는데, 이는 다형성의 확장성과 편의성을 더 잘 반영할 수 있습니다.
코드는 다음과 같습니다.
부모 클래스 정의:
하위 클래스 정의:
테스트 클래스 정의:
public class Test { public static void main(String[] args) { // 多态形式,创建对象 // Cat c = new Cat(); // Dog d = new Dog(); // 调用showCatEat showCatEat(c); // 调用showDogEat showDogEat(d); /* 以上两个方法, 均可以被showAnimalEat(Animal a)方法所替代而执行效果一致 */ showAnimalEat(c); showAnimalEat(d); } public static void showCatEat(Cat c) { c.eat(); } public static void showDogEat(Dog d) { d.eat(); } public static void showAnimalEat(Animal a) { a.eat(); } }
eat 메서드가 실행되면 다형성은 해당 메서드가 재정의됨을 규정합니다. 하위 클래스에 의해 실행되면 효과는 자연스럽게 showCatEat 및 showDogEat 메소드와 일치하므로 showAnimalEat는 위의 두 메소드를 완전히 대체할 수 있습니다.
단순한 대체가 아니라 확장성 측면에서 향후 몇 개의 하위 클래스가 나타나더라도 showXxxEat 메서드를 작성할 필요가 없으며 showAnimalEat를 직접 사용하여 완료할 수 있습니다.
그래서 다형성의 장점은 프로그램을 더 쉽게 작성하고 확장성을 높일 수 있다는 것입니다.
4. 참조 유형 변환
다형성 변환은 상향 변환과 하향 변환의 두 가지 유형으로 나뉩니다.
상향 변환
상향 변환: 다형성 자체가 상위 클래스 유형에 대한 하위 클래스 유형입니다. 업컨버전 프로세스에서는 이 프로세스가 기본값입니다.
상위 클래스 참조가 하위 클래스 객체를 가리키는 경우 이는 상향 변환입니다.
사용 형식:
父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat();
Downcast
상위 클래스 유형을 하위 클래스 유형으로 하향 변환하는 과정은 필수입니다.
상향 변환된 하위 클래스 객체. 상위 클래스 참조를 하위 클래스 참조로 변환하려면 하향 변환인 강제 유형 변환 형식을 사용할 수 있습니다.
형식 사용:
子类类型 变量名 = (子类类型) 父类变量名; 如 :Cat c =(Cat) a;
Transformation 데모, 코드는 다음과 같습니다.
클래스 정의:
테스트 클래스 정의:
변환 예외
转型的过程中,一不小心就会遇到这样的问题,请看如下代码:
这段代码可以通过编译,但是运行时,却报出了ClassCastException,类型转换异常!这是因为,明明创建了Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。
为了避免ClassCastException的发生,Java提供了 关键字,给引用变量做类型的校验。
格式如下:
变量名 instanceof 数据类型 如果变量属于该数据类型,返回true。 如果变量不属于该数据类型,返回false。
所以,转换前,我们最好先做一个判断,代码如下:
想学习更多相关教程请访问:java入门学习
위 내용은 Java 객체 지향 - 다형성에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!