多态中的成员特色

   多态中,成员特色
 
    1.成员变量(编译运行全看父类):
    编译的时候, 参考父类中有没有这个变量,若是有,编译成功,没有编译失败
    运行的时候, 运行的是父类中的变量值
    
     
   2.成员方法( 编译看父类,运行看子类):
   编译的时候, 参考父类中有没有这个方法,若是有,编译成功,没有编译失败
   运行的时候, 运行的是子类的重写方法java

    特例:调用静态成员方法时,运行看父类。缘由:静态属于类,不属于对象。不new对象,也可调用父类的静态方法,直接用类名调用。测试

父类spa

package Static_user;

public class Fu {

	int a = 1;
	static int b = 1;//静态变量
	
	public void show1(){
		System.out.println("父类的方法show1");
	}
	
	//静态方法
	public static void show2(){
		System.out.println("父类的静态方法show2");
	}
	
}

子类code

package Static_user;

public class Zi extends Fu {
	int a = 2;
	static int b = 2;//静态变量
	
	public void show1 (){
		System.out.println("子类的方法show1");
	}
	
	//静态方法
	public static void show2(){
		System.out.println("子类的静态方法show2");
	}
}

测试类对象

package Static_user;
/*
 * 多态运行中,编译看谁,运行看谁
 * 编译都看 = (等号)左边的父类,父类又编译成功,没有编译失败
 * 运行时,成员变量,运行的全是父类的
 * 运行时,静态方法,运行父类的静态方法
 * 运行时,非静态方法,运行子类的重写方法
 * 
 */
public class Test {

	public static void main(String[] args) {
		Fu f = new Zi();
		
		System.out.println("a="+f.a);
		f.show1();
		
		System.out.println("b="+f.b);
		
		/*
		 * 调用的仍是父类的静态方法
		 * 缘由:静态属于类,不属于对象。不new对象,也可调用父类的静态方法,直接用类名调用
		 * 对象的多态性,静态与对象无关
		 */
		f.show2();
		
	}
}

运行结果:编译

a=1
子类的方法show1
b=1
父类的静态方法show2
相关文章
相关标签/搜索