zoukankan      html  css  js  c++  java
  • day12

    接口:

     1、如何声明一个接口
        【修饰符】 interface 接口名{

          }
       【修饰符】 class 类名{
         }
    2、接口的成员
          JDK1.8之前:
         (1)全局静态的常量  public static final
         (2)公共的抽象的方法  public abstract
         JDK1.8之后:增加了两个成员
        (1)默认方法
        (2)静态方法
     3、如何使用接口?
        (1)全局静态的常量:通过接口名直接调用
        (2)抽象方法,由实现类(就是子类)来实现它
      
        【修饰符】 class 实现类名  implements 接口们{
          //如果这个类不是抽象类,那么必须实现接口的所有的抽象方法
           }
      
         接口可以比喻成“干爹”,可以有好几个
         继承可以比喻成“亲爹”,只能有一个,所以单继承
        
    4、接口的特点
       (1)接口也是不能直接创建对象
       (2)一个类可以同时实现多个接口
       (3)一个类可以同时继承它的父类,又实现接口,要求必须继承在前,实现在后
        【修饰符】 class 实现类名 extends 父类  implements 接口们{
         //如果这个类不是抽象类,那么必须实现接口的所有的抽象方法
          }
       (4)接口和父类有点像,所以接口的变量与实现类对象可以构成多态引用
       (5)一个实现类实现接口时,必须实现接口的所有的抽象方法,否则这个实现类也得是抽象类
       (6)接口可以继承接口,并且可以继承多个接口。
        【修饰符】interface 接口名 extends 接口们{
          }


    关系:
         类与类之间:继承,单继承  extends
         类与接口之间:类实现接口,可以多实现 implements
         接口与接口之间:继承,多继承 extends
      
    JDK1.8之后,接口增加了两个成员:
      1、静态方法
           和类中的静态方法的格式一样。
           调用时:通过“接口名."调用即可
           原来为了为某个接口提供工具类,还要增加一个类,现在就不同了,直接在接口中声明静态方法即可。
           而且这些静态的实现和接口的实现类是什么类型无关。
      2、默认方法
          语法格式:
          【修饰符】 interface 接口{
                    【修饰符】 default 返回值类型  方法名([形参列表]){
                             方法体
                             }
             }
     如何调用?
           必须通过接口的"实现类对象."才能调用
     
           某一个接口的某个抽象方法,可能它的多数实现类对该方法的实现是一样的,那么就没必要每一个实现类都写一遍。
           把这样的方法实现,提取到接口中声明为默认方法,如果其他不一样的实现类,可以选择“重写”。

    默认方法的冲突问题:
        1、当某个类实现了多个接口,多个接口的默认方法的方法签名是一样的
             必须重写,但是在重写的时候可以选择(1)保留其中一个(2)选择完全重写
        2、当某个类继承了父类,又实现了接口,但是父类中有一个方法和接口中的默认方法的方法签名是一样的
            默认选择保留“父类”,当然也可以选择重写(1)选择父接口的(2)完全重写

    简单工厂模式(了解):
        (1)当创建某个对象比较麻烦
        (2)想要与被创建的对象的类型解耦合
     工厂模式的目的:对象的创建者与对象的使用者角色分离
     代码的结构:
        (1)接口
        (2)有接口的很多实现类
        (3)有一个工厂类,专门new接口的各种实现类的对象
        (4)使用接口的实现类对象的地方,通过工厂类之间获取对象,而不直接new实现类对象
    代理模式:(了解)
         1、接口:主题接口
         2、被代理者
         3、代理者
        (1)被代理者和代理者都要实现主题接口。
        (2)要指定代理者为谁代理,即代理者中必须持有被代理者对象的引用

    内部类:定义在另一个类里面的类叫做内部类。把外面的这个类称为外部类。
       内部类分为:
           1、成员内部类
                在外部类的里面,在外部类的方法的外面。
           (1)静态成员内部类:有static修饰
           (2)非静态成员内部类:没有static修饰
           2、局部内部类
              在外部类的方法体里面。
          (1)有名局部内部类
          (2)匿名局部内部类

    为什么要用内部类?
           类的概念:一类具有相同特性的事物,用一个Java类进行描述。例如:学生类,身体类
           内部类也是类,当某个事物的内部,存在另一个事物,发现也需要一个Java类进行描述,而且这个内部的事物只为外部类服务,
           基本上不会单独使用,那么这个时候用内部类比较合适。定义内部类还有一个好处,内部类可以使用外部类的私有成员。

    一、静态内部类
        1、语法格式:
           【修饰符】 class 外部类{
                //静态成员内部类
           【修饰符】 static class 内部类{
                }
             }

         2、静态内部类也是一个类
          (一)静态内部类的成员(都可以)
            (1)属性:类变量和实例变量
            (2)方法:静态方法和非静态方法,抽象方法(只有静态内部类是个抽象类就可以)
            (3)构造器:无参构造,有参构造
            (4)代码块:静态代码块和非静态代码块
            (5)内部类:各种内部类
         (二)静态内部类可以继承父类实现接口
         (三)有自己的字节码文件: 外部类名$静态内部类名.java
        3、如何使用静态内部类
         (1)在外部类中使用静态内部类, 和原来使用其他类一样。
         (2)在外部类的外面使用静态内部类
                  使用静态内部类,前面要加“前缀”,“外部类名.内部类名”
         (3)在静态内部类中,使用外部类的成员
                  不能在静态内部类中,使用外部类的非静态成员(属性和方法),其他的都能用
    二、非静态的成员内部类
         1、语法格式:
           【修饰符】 class 外部类{
                //非静态成员内部类
                【修饰符】 class 内部类{
                   }
             }
         2、非静态内部类也是一个类
         (一)非静态内部类的成员(都可以)
             (1)属性:实例变量
             (2)方法:非静态方法,抽象方法(只有非静态内部类是个抽象类就可以)
             (3)构造器:无参构造,有参构造
             (4)代码块:非静态代码块
             (5)内部类:各种非静态内部类
        (二)非静态内部类可以继承父类实现接口
        (三)有自己的字节码文件: 外部类名$非静态内部类名.java
       3、如何使用静态内部类
      (1)在外部类中使用非静态内部类
               在外部类的静态成员中不能使用非静态的内部类(特殊)
      (2)在外部类的外面使用非静态内部类
              步骤:
                 第一步:先创建外部类的对象
                 第二步:通过外部类的对象访问内部类的构造器创建内部类的对象  或者  通过外部类的某个方法来返回内部类的对象
                 第三步:才能通过内部类的对象访问它的成员
     (3)在非静态内部类中,使用外部类的成员
               直接使用,没有限制
     

  • 相关阅读:
    koa学习中的一系列问题-mongodb
    JS基础语法使用
    vue中的this指向问题
    CDN的问题
    vue基本语法及使用
    python自动化读取excel数据,写入excel数据,xlrd、xlutils
    jenkins配置邮件发送功能
    pytest生成的index.html报告发送邮箱后没有样式的解决办法
    pytest命令同时执行多个目录,多个不同目录下的文件
    pytest+jenkins+allure生成报告
  • 原文地址:https://www.cnblogs.com/zzz222zzz/p/11572870.html
Copyright © 2011-2022 走看看