zoukankan      html  css  js  c++  java
  • 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、构造函数具体初始化

  • 相关阅读:
    H5新增——html概述
    H5新增———html5概述
    ASP.NET Web API Demo OwinSelfHost 自宿主 Swagger Swashbuckle 在线文档
    如何写个死循环,既不独占线程,又不阻塞UI线程?
    C# 扩展TaskScheduler实现独立线程池,支持多任务批量处理,互不干扰,无缝兼容Task
    C# async await 异步执行方法封装 替代 BackgroundWorker
    巨坑!
    C# .NET Socket SocketHelper 高性能 5000客户端 异步接收数据
    一个简单的例子看明白 async await Task
    一个非常轻量级的 Web API Demo
  • 原文地址:https://www.cnblogs.com/zhuzhuqwa/p/5887363.html
Copyright © 2011-2022 走看看