多态 : (子类对象也是父类的对象)在继承或实现关系中 一个
父类/父接口 的
引用变量 它能指向父类对象也能指向子类对象,
它可以 根据当前时刻 指向的不同,自动 调用实际对象(子父类都有) 的方法。
如果要父类引用 调用子类特有的方法,父类引用指向的应是子类的对象,然后强制转换成子类对象
总结: 1. 在 多态中调用静态成员的时候调用的只是引用的类的静态成员,跟对象没有关系 所 以静态成员不具有多态性
2. 普通变量也不具有多态性
它可以 根据当前时刻 指向的不同,自动 调用实际对象(子父类都有) 的方法。
如果要父类引用 调用子类特有的方法,父类引用指向的应是子类的对象,然后强制转换成子类对象
总结: 1. 在 多态中调用静态成员的时候调用的只是引用的类的静态成员,跟对象没有关系 所 以静态成员不具有多态性
2. 普通变量也不具有多态性
另: 抽象类(具有共性的类向上抽取出来的类)的抽象方法要具有多态性不能是静态的 //接口中的方法全是抽象方法,要具有多态性不能是静态的
代码: Zi.java
//静态成员不具有多态性
class Fu {
public static String s = "Fu类静态变量s"; // 静态变量
public static void f() { // 静态方法
System.out.println("Fu类静态方法f");
}
//--------------------------------------
public String str = "Fu类普通变量str";
public void fun(){
System.out.println("Fu类普通方法fun");
}
}
public class Zi extends Fu {
public static String s = "Zi类静态变量s";
public static void f() {
System.out.println("Zi类静态方法f");
}
//--------------------------------------
public String str = "Zi类普通变量str";
public void fun(){
System.out.println("Zi类普通方法fun");
}
public static void main(String[] args) {
Fu fu = new Zi(); // 父类引用指向子类对象
System.out.println("========父类引用,子类对象--静态变量和方法============");
System.out.println(fu.s);
fu.f();
System.out.println("\n=======父类引用,子类对象--普通变量和方法============");
System.out.println(fu.str);
fu.fun();
}
}
/*
* 结果是:
* ========父类引用,子类对象--静态变量和方法============
* Fu类静态变量s
* Fu类静态方法f
*
* =======父类引用,子类对象--普通变量和方法============
* Fu类普通变量str
* Zi类普通方法fun
*
*/