多态性
1、概念:
同一个行为具有多个不同表现形式或形态的能力。
2、格式:
父类类型 变量名 = new 子类类型();
3、多态存在的三个必要条件:
继承、重写、父类引用指向子类对象。
4、重写:
1)子类能够重写父类的方法。
2)当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
3)要调用父类中被重写的方法,则必须使用关键字super。
5、多态的实现方式:
1)重写
2)接口
3)抽象类和抽象方法
6、多态中成员的特点:
1)多态成员变量:编译运行看左边
Fu f=new Zi();
System.out.println(f.num); //f是Fu中的值,只能取到父中的值
2)多态成员方法:编译看左边,运行看右边
Fu f1=new Zi();
System.out.println(f1.show());
//f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。
7、多态的作用:
1)不必编写每一子类的功能调用,可以直接把不同子类当父类看,屏蔽子类间的差异,提高代码的通用率/复用率。
2)父类引用可以调用不同子类的功能,提高了代码的扩充性和可维护性。
--例子:
package polym;
public class TestP {
public static void main(String[] args) {
show(new Cat()); // 以 Cat 对象调用 show 方法
show(new Dog()); // 以 Dog 对象调用 show 方法
Animal a = new Cat(); // 向上转型
a.eat(); // 调用的是 Cat 的 eat
Cat c = (Cat)a; // 向下转型
c.work(); // 调用的是 Cat 的 work
}
public static void show(Animal a) {
a.eat(); // 类型判断
if (a instanceof Cat) { // 猫做的事情
Cat c = (Cat)a;
c.work();
} else if (a instanceof Dog) { // 狗做的事情
Dog c = (Dog)a;
c.work();
}
}
}
//定义一个抽象的动物类接口,定义一个抽象的eat()方法
abstract interface Animal {
abstract void eat();
}
//喵实现动物接口并重写eat()方法,拥有自己的work()方法
class Cat implements Animal {
public void eat() {
System.out.print("猫吃鱼,");
}
public void work() {
System.out.println("猫抓老鼠");
}
}
//狗实现动物接口并重写eat()方法,拥有自己的work()方法
class Dog implements Animal {
public void eat() {
System.out.print("狗啃骨头,");
}
public void work() {
System.out.println("狗看家");
}
}
--输出结果:
猫吃鱼,猫抓老鼠
狗啃骨头,狗看家
猫吃鱼,猫抓老鼠
面试题:
(答案见下一篇博客面试题部分)
无
上篇面试题答案:
无