java多态类的成员访问特点探究

普通成员变量编译时看左边类型,运行时看左边类型
普通成员方法编译时看左边类型,运行时看右边类型
静态成员变量和静态方法是属于类所有的,不依赖于对象,编译时看左边,运行时看右边

由于子类在集成父类的时候会对父类的普通成员方法进行重写,因此在运行时调用的是子类的成员方法,普通成员变量、静态成员变量和静态方法不管是在编译期间还是运行期间均是按照父类来执行。下面举例说明:

下面是PolymorphicParent.java内容

package com.mzbonnt.classabout;

/**
 * 父类,用以测试多态类的成员访问特点
 * @author hp
 *
 */
public class PolymorphicParent {
	public int num = 10;
	public static int num2 = 20;
	
	public void show()
	{
		System.out.println("父类show");
	}
	public static void method()
	{
		System.out.println("父类静态method");
	}
}
下面是PolymorphicDemo.java内容
package com.mzbonnt.classabout;

/**
 * 子类,用以测试多态类的成员访问特点
 * @author hp
 * 
 * 普通成员变量编译时看左边类型,运行时看左边类型
 * 普通成员方法编译时看左边类型,运行时看右边类型
 * 静态成员变量和静态方法是属于类所有的,不依赖于对象,编译时看左边,运行时看右边
 */
public class PolymorphicDemo extends PolymorphicParent{
	
	public int num = 100;
	public static int num2 = 200;
	
	public void show()
	{
		System.out.println("子类show");
	}
	public static void method()
	{
		System.out.println("子类静态method");
	}
	public void show2() 
	{
		System.out.println("子类show2");
	}
	public static void method2() 
	{
		System.out.println("子类show2");
	}
	public static void main(String[] args) 
	{
		PolymorphicParent polymorphic = new PolymorphicDemo();
		
		//普通成员变量
		System.out.println(polymorphic.num);//10
		
		//静态成员变量
		System.out.println(polymorphic.num2);//20
		System.out.println(PolymorphicParent.num2);//20
		System.out.println(PolymorphicDemo.num2);//200
		
		//普通成员方法
		polymorphic.show();//子类show
		
		//静态成员方法
		polymorphic.method();//父类静态method
		PolymorphicParent.method();//父类静态method
		PolymorphicDemo.method();//子类静态method
	}
}


你可能感兴趣的:(多态)