다형성: 다형성은 서로 다른 하위 유형의 개체가 동일한 메시지에 다르게 응답하도록 허용하는 것을 의미합니다. 간단히 말해서, 동일한 객체 참조로 동일한 메소드가 호출되지만 수행되는 작업은 다릅니다. 다형성은 컴파일 타임 다형성과 런타임 다형성으로 구분됩니다.
객체의 메서드를 객체가 외부 세계에 제공하는 서비스로 간주하는 경우 런타임 다형성은 다음과 같이 설명할 수 있습니다. 시스템 A가 시스템 B가 제공하는 서비스에 액세스할 때 시스템 B는 서비스를 제공하는 여러 가지 방법이 있습니다. 하지만 모든 것은 시스템 A에 투명합니다(전기 면도기가 시스템 A이고 전원 공급 시스템이 시스템 B인 것처럼 시스템 B는 배터리나 AC 또는 심지어 태양 에너지로 전원을 공급받을 수 있습니다. 시스템 A는 클래스 B 객체만 통과합니다) 전원 공급 방법을 호출하지만 전원 공급 시스템의 기본 구현이 무엇인지, 전원을 얻는 방법을 모릅니다.
메서드 오버로딩(overload)은 컴파일 시간 다형성(프론트 바인딩이라고도 함)을 구현하는 반면, 메서드 재정의(override)는 런타임 다형성(사후 바인딩이라고도 함)을 구현합니다.
런타임 다형성은 객체 지향의 핵심입니다. 다형성을 달성하려면 다음 두 가지 작업을 수행해야 합니다.
메서드 재작성(하위 클래스가 상위 클래스를 상속하고 기존 또는 추상 메소드를 재작성함)
객체 모델링(상위 유형 참조를 사용하여 하위 유형 객체를 참조하므로 동일한 메소드를 호출하는 동일한 참조가 하위 유형 객체에 따라 다른 동작을 표시합니다).java中的引用变量有两个类型:一个编译时类型,一个是运行时类型。编译时类型由声明该变量使用的类型决定,运行时类型由实际赋给 该变量的对象决定。如果编译时类型与运行时类型不一致,就可能出现所谓的多态。——疯狂java讲义
public class PolyTest5 { public void run(Car car)//这样利用公共的父类就屏蔽了子类之间的差异性,可以应对所有的车. { car.run();//只要子类继承了car都可以作为参数传入方法中.如果没有多态,就要有对应每个类的方法.非常的麻烦. } public static void main(String[] args) { PolyTest5 test = new PolyTest5(); Car car = new BMW(); test.run(car); QQ qq = new QQ(); test.run(qq);//向上类型转换. } } class Car { public void run() { System.out.println("car is running"); } } class BMW extends Car { public void run() { System.out.println("BMW is running"); } } class QQ extends Car { public void run() { System.out.println("QQ is running"); } }다형성의 세 가지 요소: 1. 상속 2. 재정의 3. 부모 클래스 참조는 자식 클래스 객체를 가리킵니다.
관련 학습 권장사항:
Java 기본 튜토리얼위 내용은 자바에서 다형성을 이해하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!