java学习笔记-多态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习笔记-多态相关的知识,希望对你有一定的参考价值。

  个人对多态的一点理解,不一定完全正确,欢迎大家批评指正。

 1.什么是多态

    面向对象的三大特性:封装,继承,多态。从某种程度来说,多态是建立在封装和继承的继承之上的。

    多态性可以理解为同一个事物的多种表现形态

    1)方法的重载与重写

      2)子类对象的多态性:父类的引用指向子类对象(更多的是指这种形式)

               父类 f = new 子类();

 2.子类对象的多态性使用要求:

          1)要有类的继承

      2)要有子类对父类方法的重写

    3)父类的引用指向资料对象

 3.属性没有多态性

 下面用一个简单的例子来掩饰一下:

 1 //父类
 2 public class Person {
 3     public void eat(){
 4         System.out.println("人吃饭");
 5     }
 6     public void walk(){
 7         System.out.println("人走路");
 8     }
 9 }
10 //子类Man
11 public class Man extends Person {
12     public void eat(){
13         System.out.println("男人吃饭");
14     }
15     public void walk(){
16         System.out.println("男人走路");
17     }
18     public void sleep(){
19         System.out.println("睡觉");
20     }
21 22 //子类Woman
23 public class Woman extends Person {
24     public void eat(){
25         System.out.println("女人吃饭");
26     }
27     public void walk(){
28         System.out.println("女人走路");
29     }
30     public void shopping(){
31         System.out.println("购物");
32     }
33 34 //测试类
35 public class Test{
36     public static void main(String[] args) {
37         //父类的引用指向子类对象 
38         Person p = new Man();//向上转型 即将子类型转换为父类型
39         //虚拟方法调用:通过父类的引用指向子类对象实体,调用方法是执行的是子类重写父类的方法
40         p.eat();//男人吃饭
41         p.walk();//男人走路
42         //p.sleep(); //错误 用父类引用调用了父类不存在的方法
43         Man m = (Man)p;//向下转型 即将父类型转换为子类型,必须强制转换,并且父类型的引用必须指向子类的对象,即指向谁才能转换成谁。
44         m.sleep();//睡觉
45         
46        Person p1 = new Woman();
47        //java.lang.ClassCastException
48        //向下转型时,只能转向指向的对象类型
49        //Man m1 = (Man)p1;
50          Woman w = (Woman)p1;
51     }
52 }    

    通过上面的例子我们可以发现,如果想要调用父类没有的方法,而子类独有的方法时,需要进行强制类型转换。如上面将p强制转换m。

    并且转换的时候只能转向指向的对象类型,如p1只能向下转型为Women m1,而不能转型为Man类型

 

 4.使用多态的好处 

       1)提高了程序的扩展性和维护性

       2)具有很强的灵活性

       3)简化了代码编写和修改过程

     

以上是关于java学习笔记-多态的主要内容,如果未能解决你的问题,请参考以下文章

java中封装,继承,多态,接口学习总结

java学习笔记-多态

No2_1.接口继承多态_Java学习笔记_接口

java学习笔记3(datawhale教程)

Java学习笔记—多态

Thinking in java学习笔记之多态