补充:
隐式的引用:
this:指代当前对象
super:指代当前对象的超类对象
外部类名.this:指代当前对象的外部类对象
一、多态
即多种形态
1、向上造型/自动类型转换:
1)、超类型的引用指向派生类的对象
2)、能点出来什么,看引用的类型
2、实际应用:
1)将不同的对象(狗、鱼、鸡)同一封装到一个超类数组(动物数组)中来访问,实现代码复用
2)将超类型作为参数或返回值类型,传递或返回派生类(Dog/Fish/Chick)对象,以扩大方法的应用范围,实现代码复用
3、向下转型/强制类型转换,成功的条件只有两种:
1)引用索指向的对象,就是该类型
2)引用所指向的对象,实现了该接口或继承了该类型
强转时若不符合如上条件,会发生classcastexception类型转换异常
建议:在强转之前先通过instanceof判断引用指向的对象是否是该类型
instanceof返回boolean结果,他为true的条件就是强转成功的条件
4、何时需要强转:
若想访问的属性/方法在超类中没有,则需要强制类型转换
二、内部类
1、类中套类,外面的称为外部类,里面的称为内部类
2、内部类通常只服务与外部类,对外不具备可见性
3、内部类对象通常在外部类中创建
内部类中可以直接访问外部类的成员
原因:在内部类中有个隐式的引用指向创建它的外部类对象
隐式的引用:外部类名.this
何时用:
若A类只让B类用,并且A类还想访问B类的成员,可以设计为成员内部类
匿名内部类:
应用率高,重点掌握
何时用:
如果想创建一个派生类对象,并且对象只创建一次,可以设计为匿名内部类,大大简化代码
注意:匿名内部类中不能修改外面局部变量的值(默认是final的)
三、package和import
package
用途:声明包
作用:避免类的命名冲突
规定:同包中的类不能同名,不同包的类可以同名
类的全称:包名.类名。包名常常用层次结构
建议:包名所有字母都小写
import
用途:导入类
同包中的类可以直接访问,但是不同包中的类不能直接访问,若想访问:
1.类的全称,因太繁琐,所以不建议
2.先import导入类, 在访问类,此为建议模式