多态的定义与使用格式
多态的定义格式:就是父类的引用变量指向子类对象
父类类型 变量名 = new 子类类型();
变量名.方法名();
普通类多态定义的格式
父类 变量名 = new 子类();
如: class Fu {}
class Zi extends Fu {}
//类的多态使用
Fu f = new Zi();
式抽象类多态定义的格
抽象类 变量名 = new 抽象类子类();
如: abstract class Fu {
public abstract void method();
}
class Zi extends Fu {
public void method(){
System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Fu fu= new Zi();
接口多态定义的格式
接口 变量名 = new 接口实现类();
如: interface Fu {
public abstract void method();
}
class Zi implements Fu {
public void method(){
System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Fu fu = new Zi();
注意事项
同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法。
如 Person p1 = new Student();
Person p2 = new Teacher();
p1.work(); //p1会调用Student类中重写的work方法
p2.work(); //p2会调用Teacher类中重写的work方法
当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法。
public classPerson {public voideat() {
System.out.println("人吃饭");
}
}
public class Student extendsPerson{public voideat() {
System.out.println("学生吃饭");
}
}
public abstract classAnimal {public abstract voidsleep() ;
}
public class Cat extendsAnimal{public voidsleep() {
System.out.println("猫趴着睡觉");
}
}
public interfaceDrinking {public abstract voiddrink();
}
public class Pig implementsDrinking{public voiddrink() {
System.out.println("小猪喝酒");
}
}
public classDemo01 {public static voidmain(String[] args) {//1.多态:子类对象指向父类引用变量(普通类之间的多态)
Person p=newStudent();
p.eat();//2.抽象类与普通类的多态(抽象类可利用多态创建普通对象)
Animal a=newCat();
a.sleep();//3.接口与普通类之间的多态(子类必须是普通类)
Drinking d=newPig();
d.drink();
}
}