多态前提:
1.有继承或者实现Zi extends(implements) Fu
2.方法重写
格式:
Fu fu = new Zi()
原理:
1.首先检查父类是否有该方法,若没有则报错
2.直接调用子类重写后的方法,而不是父类的方法
package com;
class Fu {
public void eat(){
System.out.println("Fu eat");
}
}
class Zi extends Fu {
public void eat(){
System.out.println("Zi eat");
}
}
public class App2 {
public static void main(String[] args) {
Fu fu = new Zi();
fu.eat(); //Zi eat
}
}
在编译时调用Fu
的eat
方法,再执行时调用Zi
的方法
同样接口也是一样
package com;
interface Fu {
public abstract void eat();
}
class Zi implements Fu {
public void eat(){
System.out.println("Zi eat");
}
}
public class App2 {
public static void main(String[] args) {
Fu fu = new Zi();
fu.eat(); //Zi eat
}
}
抽象类也是同样的道理:
package com;
abstract class Fu {
public abstract void eat();
}
class Zi extends Fu {
public void eat(){
System.out.println("Zi eat");
}
}
public class App2 {
public static void main(String[] args) {
Fu fu = new Zi();
fu.eat(); //Zi eat
}
}