Java学习笔记之多态

多态概述

1,多态是Java继封装,继承之后的第三大特性

2,从字面意思来看可以理解为事物的多种形态,比如某某同学既可以是,又可以是学生,出现两种形态

3,多态体现为父类对象引用子类实例

1 //  定义格式:父类类型 变量名=new 子类类型();
2     Person p = new Student();

4,前提条件:必须有子父类关系

 

多态使用时的特点

1,多态成员属性:调用,执行向左看

 

1 Person p=new Student();
2 System.out.println(p.age);//p是Person中的值,只能取到父类的值

 

2,多态成员方法:调用向左看,执行向右看

1 Person p=new Student();
2 System.out.println(p.eat());//p的门面类型是Person ,但实际类型是Student,所以调用的是重写后的方法。

如何理解呢?p实际类型是Student类  但Person限制了p使用Student类独立Person类之外的属性和方法(这就是向左看,p只能调用Person及其父类的属性和方法)

                      如果子类中重写了父类的方法,执行的时候会调用重写后的方法(这就是向右看)

 

多态的类型转换

多态的转型分为向上转型和向下转型两种

向上转型:多态本身就是向上转型过的过程

          使用格式:父类类型 变量名=new 子类类型();

          适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。

向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型(有限制

          使用格式:子类类型 变量名=(子类类型) 父类类型的变量

          适用场景:当要使用子类特有功能时。

1 //假设Person是父类,Student继承Person,BigStudent继承Student
2 Person p=new Student();
3 
4 //这是正确的,p能否下转为Student取决于p的实际类型
5 Student s=(Student)p;
6 
7 //这是错误的,Student已经是p能下转的下限,但这个编译时不会报错,运行时才会
8 BigStudent bs=BigStudent (p);

小贴士:编译错误:编写代码时出现的红线和红×

              运行错误:运行时控制台抛出的错误显示

instanceof关键字

用来判断某个对象是否属于某种数据类型。

注意: 返回类型为布尔类型

if(p instanceof Student){
    ((Student) p).study(); 
}else if(p instanceof Teacher){
    ((Teacher) p).goClass();
}

 

posted @ 2019-10-16 17:31  红·林  阅读(256)  评论(0编辑  收藏  举报