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