多态成员的特点
成员变量:编译时看的是左边,运行时看的是左边
成员方法:编译时看的是左边,运行时看的是右边‘
静态方法:编译时看的是左边,运行时看的是左边
总结:编译时看的都是左边,运行时成员方法看的是右边,成员变量和静态方法看的都是左边
成员变量:编译时看的是左边,运行时看的左边
例如:下面的程序,输出结果是20
package com.itheima;
public class PoymorphicDemo {
public static void main(String[] args) {
//父类引用指向子类对象
Dad d = new Kid();
System.out.println(d.num);
}
}
class Dad {
int num = 20;
}
class Kid extends Dad {
int num = 10;
}
成员方法:编译时看的是左边,运行时看的是右边(动态绑定)
例如:下面的程序,输出结果是“我是子类方法”
package com.itheima;
public class PoymorphicDemo {
public static void main(String[] args) {
//父类引用指向子类对象
Dad d = new Kid();
d.method();
}
}
class Dad {
public void method(){
System.out.println("我是父类方法");
}
}
class Kid extends Dad {
public void method(){
System.out.println("我是子类方法");
}
}
静态方法:编译时看的是左边,运行时看的也是左边
例如:下面的程序,输出结果是“我是父类静态方法”
package com.itheima;
public class PoymorphicDemo {
public static void main(String[] args) {
//父类引用指向子类对象
Dad d = new Kid(); //使用变量去调用静态方法,其实相当于用变量类型的类名去调用
d.method();
}
}
class Dad {
public static void method(){
System.out.println("我是父类静态方法");
}
}
class Kid extends Dad {
public static void method(){
System.out.println("我是子类静态方法");
}
}