什么是多态(polymorphic)
多态就是事物存在的多种形态
Java中存在多态的前提条件
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
多态中的成员访问特点
- 成员变量:编译看左边(父类),运行看左边(父类)
- 成员方法:编译看左边(父类) ,运行看右边(子类) ,父类如果没有该方法,则不可调用。
- 静态方法:编译看左边(父类) ,运行看左边(父类)
总结:只有非静态的成员方法,编译看左边,运行看右边
多态中向上转型和向下转型
向上转型:父类指向子类对象 Person p = new SuperMan();
向下转型:子类指向父类对象 SuperMan sm = (SuperMan)p;
向下转型注意:父类的真实对象必须是子类对象,否则会有问题
多态的好处
1.提高了代码的维护性(继承保证)
- eg:在父类改一个属性不用每个子类都改属性
2.提高代码的扩展性(多态保证)
- eg:方法中使用父类为参数,来实现方法或者属性的调用
弊端
不能使用子类的特有属性和行为
多态注意事项
- 开发中创建对象的时候用父类引用指向子类对象比较常用
- 当作参数时候使用多态最好,因为扩展性强
多态练习题一:下面代码有什么问题
public class Demo1 {
public static void main(String[] args) {
Fu f = new Zi();
f.test();
f.show();
}
}
class Fu{
public void show() {
System.out.println("Fu show...");
}
}
class Zi extends Fu{
public void show() {
System.out.println("Zi show...");
}
public void test() {
System.out.println("Zi test...");
}
}
成员方法:编译看左边(父类) ,运行看右边(子类) ,父类如果没有该方法,则不可调用。
f.test()不可用。
多态练习题二:写出下面的输出答案
public class Demo2 {
public static void main(String[] args) {
A a = new B();
a.show();
B b = new C();
b.show();
}
}
class A{
public void show(){
show2();
}
public void show2(){
System.out.println("我");
}
}
class B extends A{
public void show2(){
System.out.println("爱");
}
}
class C extends B{
public void show(){
super.show();
}
public void show2(){
System.out.println("妳");
}
}
爱
你