Java 참조 유형에는 두 가지 유형이 있습니다. 하나는 컴파일 타임 유형이고 다른 하나는 런타임 유형입니다. 컴파일 타임 유형은 변수가 선언될 때 사용된 유형에 따라 결정되고, 런타임 유형은 변수에 실제로 할당된 개체에 따라 결정됩니다. 컴파일 타임 유형과 런타임 유형이 일치하지 않으면 소위 다형성이 발생할 수 있습니다.
public class BaseClass { public int book = 6; public void base() { System.out.println("父类中的普通方法"); } public void text() { System.out.println("父类中被覆盖的方法"); } }
public class subClass extends BaseClass{ public String book ="java"; public void text() { System.out.println("子类中覆盖父类的方法"); } public void sub() { System.out.println("子类中的普通方法"); } public static void main(String[] args) { //下面编译时类型和运行时类型完全一样,所以不存在多态 BaseClass bc = new BaseClass(); System.out.println(bc.book); //下面两次调用的是BaseClass的方法 bc.text(); bc.base(); subClass sc = new subClass(); System.out.println(sc.book); //下面调用的是subClass类的方法 sc.sub(); sc.text(); //下面编译时类型与运行时类型是不一样的,就是所谓的多态 BaseClass bs = new subClass(); System.out.println(bs.book); bs.text(); bs.base(); //bs.sub(); //bs是父类的类型,他访问的是父类的shi'li'bian'liang } }
위 프로그램의 main() 메서드에서 세 개의 변수가 생성되었습니다. 처음 두 참조 변수는 컴파일 타임 유형과 런타임 유형이 완전히 동일하므로 해당 멤버를 변수라고 하며 멤버 메소드는 정상이지만 세 번째 변수의 컴파일 타임 유형이 런타임 유형과 일치하지 않습니다. 이 참조 변수의 텍스트 메소드가 호출되면 해당 메소드가 상위 클래스에 정의되고 실제로 실행된 메서드는 상위 클래스를 재정의하는 하위 클래스의 메서드입니다.
Java에서는 유형 변환 없이 하위 클래스 객체를 상위 클래스의 참조 변수에 직접 할당할 수 있습니다. 이를 상향 변환이라고 합니다. 상향 변환은 시스템에 의해 자동으로 완료됩니다.
변수를 참조하는 메서드가 런타임에 호출되면 해당 메서드 동작은 항상 상위 클래스의 동작 특성이 아닌 하위 클래스의 동작 특성을 보여줍니다. type' 동일한 메소드를 호출하면 부모 클래스의 동작 특성이 아닌 다른 동작 특성이 나타납니다. 이것이 다형성입니다.
메서드와 달리 객체의 인스턴스 변수에는 다형성이 없습니다.
结果: 6 父类中被覆盖的方法 父类中的普通方法 java 子类中的普通方法 子类中覆盖父类的方法 6 子类中覆盖父类的方法 父类中的普通方法
위 내용은 Java의 다형성에 대한 보완의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!