Java Day 10

时间:2021-04-15 02:03:14

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

 class BookPC{
public static void main(String[] args){
useUSB(new UPan());
}
public static void useUSB(USB u){
u.open();
u.close();
}
} class Mouse{ } interface USB{
public void open();
public void close();
} class UPan implements USB{
public void open(){
System.out.println("UPan open");
}
public void close(){
System.out.println("UPan close");
}
}

好处 提高代码复用性

弊端
 前期定义的内容不能使用后期子类特有的内容
 
 多态的前提:
 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、构造函数具体初始化