zoukankan      html  css  js  c++  java
  • 多态

    多态是继封装、继承之后,面向对象的第三大特性,Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值

    最终多态体现为:父类引用变量可以指向子类对象。

    多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。

    在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法

    多态的定义格式:

    父类类型  变量名 = new 子类类型();

    变量名.方法名();

    普通类多态定义的格式:

    1     //父类 变量名 = new 子类();
    2     class Fu {}
    3 
    4     class Zi extends Fu {}
    5     //类的多态使用
    6     Fu f = new Zi();

    抽象类多态定义的格式:

     1     //抽象类 变量名 = new 抽象类子类();
     2       abstract class Fu {
     3           public abstract void method();
     4       }
     5     class Zi extends Fu {
     6       public void method(){
     7               System.out.println(“重写父类抽象方法”);
     8       }
     9     }
    10     //类的多态使用
    11     Fu fu= new Zi();

    接口多态定义的格式:

     1     //接口 变量名 = new 接口实现类();
     2        interface Fu {
     3              public abstract void method();
     4      }
     5   
     6      class Zi implements Fu {
     7              public void method(){
     8                 System.out.println(“重写接口抽象方法”);
     9         }
    10     }
    11        //接口的多态使用
    12        Fu fu = new Zi();

    注意事项:

    同一个父类的方法会被不同的子类重写。在调用方法时,调用的为各个子类重写后的方法(当变量名指向不同的子类对象时,由于每个子类重写父类方法的内容不同,所以会调用不同的方法)

    多态中成员的特点

    当子父类中出现同名的成员变量时,多态调用该变量时:

    编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。

    运行时期:也是调用引用型变量所属的类中的成员变量。

    简单记:编译和运行都参考等号的左边。编译运行看左边。

    多态的转型

    1.向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。

    1 //父类类型  变量名 = new 子类类型();
    2 Person p = new Student();

    2.向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型(如果是直接创建父类对象,是无法向下转型的)

    1 //子类类型 变量名 = (子类类型) 父类类型的变量;
    2 Student stu = (Student) p;  //变量p 实际上指向Student对象

    多态的好处与弊端

    好处:当父类的引用指向子类对象时,就发生了向上转型,即把子类类型对象转成了父类类型。向上转型的好处是隐藏了子类类型,提高了代码的扩展性。

    弊端:向上转型也有弊端,只能使用父类共性的内容,而无法使用子类特有功能,功能有限制

    三大特性总结:

    1. 封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式

    2.继承:子类会自动拥有父类所有可继承的属性和方法。

    3.多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。

  • 相关阅读:
    Android开发之Sqlite的使用
    ZOJ 3607 Lazier Salesgirl
    ZOJ 3769 Diablo III
    ZOJ 2856 Happy Life
    Ural 1119 Metro
    Ural 1146 Maximum Sum
    HDU 1003 Max Sum
    HDU 1160 FatMouse's Speed
    Ural 1073 Square Country
    Ural 1260 Nudnik Photographer
  • 原文地址:https://www.cnblogs.com/ty-v/p/9001043.html
Copyright © 2011-2022 走看看