欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java之路---Day12(多态)

程序员文章站 2022-05-22 17:06:17
2019-10-26-22:40:09 目录: 1.多态的概念 2.多态的分类 3.实现多态的三个必要条件 4.多态的格式 5.多态成员变量的使用特点 6.多态成员方法的使用特点 7.多态的好处 8.多态的向上和向下转型 1.多态的概念: 多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属 ......

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