Java Day 10

接口应用
 
多态
 猫 x = new 猫();
 动物 x = new 猫();
 
 父类或接口的引用指向其子类的对象

 1 class BookPC{
 2     public static void main(String[] args){
 3         useUSB(new UPan());
 4     }
 5     public static void useUSB(USB u){
 6         u.open();
 7         u.close();
 8     }
 9 }
10 
11 class Mouse{
12     
13 }
14 
15 interface USB{
16     public void open();
17     public void close();
18 }
19 
20 class UPan implements USB{
21     public void open(){
22         System.out.println("UPan open");
23     }
24     public void close(){
25         System.out.println("UPan close");
26     }
27 }


 
好处 提高代码复用性

弊端
 前期定义的内容不能使用后期子类特有的内容
 
 多态的前提:
 1、必须有关系,继承、实现
 2、要有覆盖
 
多态--转型
 动物 x = new 猫();//自动类型提升,特有的功能无法访问;向上转型
 猫 c = (猫)x;//向下转型
 
多态--类型判断 instanceof
 用于向下转型前的判断
 
多态--成员特点 编译看等号左边
 1、成员变量
  父类有就获取,无则编译失败
 2、成员函数
  子类有就覆盖,无则获取父类的
 3、静态函数
  静态不存在覆盖,也就不涉及多态;对象才有多态,静态方法属于类
 
内部类--应用于设计
 1、内部类可以直接访问外部类中的成员 包括私有的
 2、外部类访问内部类,则需要建立内部类对象
 
 编译后,查看class文件
 
内部类--修饰符
 Outer.Inner in = new Outer().new Inner();
 Static Outer.Inner in = new Outer.Inner();
 当内部类成员有static修饰,则内部类也要加static
 
细节
 Outer.this.num
 为什么内部类能直接访问外部类中的成员呢?
 因为内部类持有外部类的引用 外部类名.this
 
局部内部类--方法中
 内部类访问局部变量,局部变量需要被声明为final

匿名内部类
 内部类必须继承或实现一个外部类或接口
 其实就是一个匿名子类对象
 new 父类 or 接口 (){ 子类内容 }
 
应用
 当函数参数是接口类型时,且接口中的方法不超过3个,可以用匿名内部类作为实际参数进行传递。
 
细节
 主函数直接new Inner//为什么
 匿名内部类如果使用父类进行显示赋予引用变量,那么再用变量去调用子类方法则编译失败。
 
带继承的子类对象初始化
 1、成员变量默认初始化
 2、调用子类构造器
 3、调用父类构造器
 4、成员变量显示初始化
 5、构造代码块初始化
 6、构造函数具体初始化

原文地址:https://www.cnblogs.com/zhuzhuqwa/p/5887363.html