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.如果对象创建的时候本来不是猫,现在非要向下转型成为猫,就会报错。

原文地址:https://www.cnblogs.com/hpcz190911/p/11746435.html