zoukankan      html  css  js  c++  java
  • Java之路---Day12(多态)

    2019-10-26-22:40:09

    目录:

      1.多态的概念

      2.多态的分类

      3.实现多态的三个必要条件

      4.多态的格式

      5.多态成员变量的使用特点

      6.多态成员方法的使用特点

      7.多态的好处

      8.多态的向上和向下转型


    1.多态的概念:

      多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义

    2.多态的分类:

      编译时多态(静态):主要是指方法的重载,它是根据参数列表的不同来区分不同的方法

      运行时多态(动态):它是通过动态绑定来实现的,也就是大家通常所说的多态性。

    3.实现多态的三个必要条件:

      1. 继承:在多态中必须存在有继承关系的子类和父类。

      2.重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

      3.向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。

     1 package demosummary.polymorphic;
     2 
     3 public class Fu {
     4     //定义两个变量
     5     double d1;
     6     double d2;
     7 
     8     //无参构造
     9     public Fu() {
    10     }
    11 
    12     //全参构造
    13     public Fu(double d1, double d2) {
    14         this.d1 = d1;
    15         this.d2 = d2;
    16     }
    17 
    18     //设置一个方法
    19     public void area(double d1,double d2){
    20     }
    21 }
     1 package demosummary.polymorphic;
     2 //创建一个继承父类的子类
     3 public class Zi extends Fu{
     4     //重写父类中的方法
     5     @Override
     6     public void area(double d1, double d2) {
     7         double result = d1 * d2;
     8         System.out.println("计算结果:"+result);
     9     }
    10 
    11     //测试方法
    12     public static void main(String[] args) {
    13         //向上转型(多态的写法)
    14         Fu obj = new Zi();
    15         obj.area(3.5,3.5);
    16     }
    17 }

    4.多态的格式:

      父类名称 对象名 = new 子类名称();

      接口名称 对象名 = new 实现类名称();

    5.多态成员变量的使用特点:

      1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。
      2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找。

     1 package demosummary.polymorphic;
     2 //定义一个父类
     3 public class Fu01 {
     4     //定义一个成员变量
     5     int num = 10;
     6     //定义一个成员方法
     7     public void showNum(){
     8         //定义一个局部变量
     9 //        int num01 = 100;
    10         System.out.println(num);
    11 //        System.out.println(num01);
    12     }
    13 }
     1 package demosummary.polymorphic;
     2 
     3 public class Zi01 extends Fu01{
     4     //定义一个成员变量
     5     int num = 20;
     6     //覆盖重写父类方法
     7     @Override
     8     public void showNum() {
     9         //定义一个局部变量
    10 //        int num01 = 200;
    11         System.out.println(num);
    12 //        System.out.println(num01);
    13     }
    14     //定义一个测试类
    15     public static void main(String[] args) {
    16         Fu01 obj = new Zi01();
    17         System.out.println(obj.num);
    18         obj.showNum();
    19     }
    20 }

    6.多态成员方法的使用特点:

      在多态的代码当中,成员方法的访问规则是:
        看new的是谁, 就优先用谁,没有则向上找。
      口诀:编译看左边,运行看右边。
      对比一下:
        成员变量:编译看左边,运行还看左边。
        成员方法:编译看左边,运行看右边。

    7.多态的好处:

      不使用多态的写法:

        Teacher one = new Teacher();

        one.work();

        Assistant two = new Assistant();

        two.work();

      使用多态的写法:

        Employee one = new Teacher();

        one.work();

        Employee two = new Assistant();

        two.work();

      对比结论:无论右边new的时候换那个子类对象,等号左边调用方法都不会变化

    8.多态的向上和向下转型:

      向上转型:

        父类名称 对象名 =  new 子类名称();

        含义:右侧创建一个子类对象,把它当成父类看待使用

        注意事项:向上转型一定是安全的,从小范围转向大范围

      向下转型:

        子类名称 对象名 = (子类名称)父类对象;

        含义:将父类对象还原成为本来的子类对象

        注意事项

          1.必须保证对象本来创建的时候。就是猫。才能向下转型成为猫。
          2.如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错。

  • 相关阅读:
    Delphi StrUtils-字符串函数RightStr、MidStr、LeftStr
    Delphi 错误:Could not convert variant to type(Null) into type (String)
    Delphi Variants-VarIsEmpty、VarIsNull 判断Variant变量是否为空、是否包含Null值
    Python使用openpyxl读写excel文件
    CentOS7设置为局域网固定ip
    Linux下ps aux命令中STAT的参数含义(转)
    Python生成8位随机字符串的方法分析
    php源码加密方法详解
    普通程序员 与 大牛 的区别 ???
    开始记录前端学习过程中的点点滴滴
  • 原文地址:https://www.cnblogs.com/hpcz190911/p/11746435.html
Copyright © 2011-2022 走看看