>Java >java지도 시간 >Java의 다형성에 대한 보완

Java의 다형성에 대한 보완

无忌哥哥
无忌哥哥원래의
2018-07-23 10:39:331328검색

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
子类中覆盖父类的方法
父类中的普通方法

Note

  1. 참조 변수는 다음과 같습니다. 컴파일 중 컴파일 단계에서는 해당 컴파일 시간 유형의 메서드만 호출할 수 있지만 런타임은 해당 런타임 유형의 메서드를 실행합니다. 따라서 Java 코드를 작성할 때 참조 변수는 변수가 선언된 클래스의 메서드만 호출할 수 있습니다. .

  2. 타입 변수를 참조하여 포함된 인스턴스 변수에 액세스할 때, 시스템은 변수가 정의된 런타임 유형에 의해 정의된 인스턴스 변수가 아니라 변수가 정의된 컴파일 타임 유형에 의해 정의된 인스턴스 변수에 항상 액세스하려고 시도합니다.

위 내용은 Java의 다형성에 대한 보완의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.