首页 > 代码库 > 面向对象之多态

面向对象之多态

1.多态

    a:要有继承关系。

    b:要有方法重写。

    c:要有父类引用指向子类对象。

2.多态的几种运行规则

a:成员变量:编译看左边 运行看左边:

Animal t = new One();

System.out.println(t.c);

编译看父类有没有空参方法,运行用父类空参方法

b:成员方法:编译看左边(父类),运行看右边(子类)。

Animal t = new One();

  t.print();

编译看父类有没有空参方法,运行用子类空参方法

c:静态方法:编译看左边,运行看左边

类中方法被static修饰

技术分享

3.多态中向上转型和向下转型

      Person p = new SuperMan();向上转型

将SuperMan提升为Persone类

      SuperMan sm = (SuperMan)p;向下转型

必需先有向上转型再有向下转型调用子类特有的方法,将对象p强制转换为子类sm;

技术分享

输出结果:谈几个亿的大生意

飞出去救人

注意:a.创建对象时候只有类中有构造方法时才访问基本类的构造方法

                B.本案例多态体现:Animal a= new Cat();后再向下转型Cat c = (Cat)a;

4.多态的好处与缺点

优点:

* a:提高了代码的维护性(继承保证)

* b:提高了代码的扩展性(由多态保证)

缺点:

不能调用子类的特有属性和行为

技术分享

技术分享

5.好题分析

找错

 

 1 class Fu {
 2     public void show(){
 3         System.out.println("fu show");
 4     }
 5 
 6 }
 7 class Zi extends Fu{
 8     public void show(){//子类show方法要是不写会调用父类show方法,也就是子类没有重写父类方法而是继承了父类方法
 9         System.out.println("zi show");
10     }
11     public void method(){
12         System.out.println("zi method");
13     }
14 }
15 
16 public class TextDemo{
17     public static void main(String[] args){
18         Fu f = new Zi();
19         f.method();//父类没有method方法不能编译
20         f.show();
21     }
22 }

 

面向对象之多态