首先了解下java中的绑定.java中有静态绑定和动态绑定,也叫前期绑定和后期绑定.除了final(private 也算final),static,构造函数才是静态绑定.
1.java多态demo:
只有运行时才知道该调用哪个方法.
package javaBase1;
public class App {
public static void main(String[] args){
Parent p1 = new Child1();
p1.showName(); //调用 child1的方法
Parent p2 = new Child2();
p2.showName(); //调用child2的方法
}
}
class Parent{
public void showName(){
System.out.println("parent method");
}
}
class Child1 extends Parent{
@Override
public void showName(){
System.out.println("Child1 method");
}
}
class Child2 extends Parent{
public void showName(){
System.out.println("Child2 method");
}
}
输出:
Child1 method
Child2 method
2.多态的缺陷:
以公有属性,静态方法为例.
package javaBase1;
public class App1 {
public static void main(String[] args){
Parent p1 = new Child1();
System.out.println(p1.name);
p1.showName();
Parent p2 = new Child2();
System.out.println(p2.name);
p2.showName();
}
}
class Parent{
public String name = "张三";
public static void showName(){
System.out.println("parent method");
}
}
class Child1 extends Parent{
public String name = "李四";
public static void showName(){
System.out.println("child1 method");
}
}
class Child2 extends Parent{
public String name = "王五";
public static void showName(){
System.out.println("child2 method");
}
}
输出:
张三
parent method
张三
parent method
总结: 可以说是 父类的方法如果不能被重写,就不能享有多态吧.
private, final, static(静态方法与类相关,不和单个对象有关),构造函数都不能被子类重写