zoukankan      html  css  js  c++  java
  • 接口和内部类

    接口的定义:接口不是类,是对类的一组需求描述。

    如何实现接口:1.将类声明为实现给定的接口(implements)

           2.对接口中的所有方法进行定义(实现)

    接口的特性:1)接口变量必须引用实现了接口的类对象

          2)可以使用 instanceof 检查一个对象是否实现了某个接口

          3)与可以建立类的继承关系一样,接口也可以被扩展

            例如:public interface Powerd  extends Moveable

          4)接口中不能包含 实例域 和 静态方法,但可以包含常量。

          5)接口中的方法 自动被设置为 public,接口中的域 将自动被设置为 public static final 

    接口和抽象类的异同:抽象类只能扩展于一个类,即一个类只能继承于一个类;然而,一个类可以实现多个接口。

    -----------------------------------------------------------------------------------------------------------------------------------------

    内部类:定义在另一个类中的类。

    写法

    public class OuterClass{
      
      private int var1;
      
      public class InnerClass{
        
            //an inner class,内部类
      }
    }

    使用内部类的原因:

      1)内部类 方法 可以访问 该类 定义所在作用域中的数据,包括私有的数据。

      2)内部类可以对同一个包中的其他类隐藏起来,换句话说,同一个包中的其他类 是 看不到 内部类的。

      3)当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

     创建内部类,并不代表:包含 内部类的外围类的对象,都有一个内部类的对象实例域。而是 内部类的对象 包含一个 指向了创建它的外部类对象的隐式引用

    通过查询编译后的代码,java 编译器会将 内部类编译成 一个类文件,名称组成: 外围类$内部类.class。在类文件中,会多一个 final 的实例域 this$0。而在外部类的类文件中会多一个 access$0 静态方法。

    1)当某个对象只在某个方法中创建一次,那么就可以定义局部内部类

      1)创建局部内部类,不能使用 public 或 private 访问修饰符 进行声明

      2)作用域 只现定于 声明此类所在的块中

      3)相比于其他内部类:局部内部类 可以访问 局部变量(必须被声明为 final

      写法

    public class OuterClass{
      
      private int var1;
      
      
      public void method1(){
    
        //do something
      
         public class InnerClass{
            //当前的 InnerClass 就是一个局部内部类,其作用域就是当前生命的块中,也就是这个方法内
         }
      }
    }

    2)当只创建某个类的对象时,那么就可以考虑创建 匿名内部类

      超类的写法:

    public class SuperType(){
     
      private String var;
      
      public SuperType(String var){
          this.var = var;
      }
    }
    
    public void method(SuperType superType){
       //do something
    }
    
    method(new SuperType(var){//匿名内部类的参数,只能通过父类传递进去
       //innser class methods and data
    });

      接口的写法

      

    new Interface (){//匿名内部类的实现接口,不能带有参数,因为接口没有构造函数。
        //innser class methods and data
    }

    3)当需要把一个类隐藏在另外一个类的内部时,并不需要内部类引用外部类对象,这个时候就可以通过静态内部类来实现。

      

    class OuterClass{
      
      public static class StaticClass{
            //静态内部类
       }
    }
    Read the fucking manual and source code
  • 相关阅读:
    Linux 安全工具之extundelete误删除恢复
    Linux安全工具之fail2ban防爆力破解
    构建高效安全的Nginx Web服务器
    必读说明
    U盘因格式化 NTFS 中断造成无法识别,生产平台同样无法识别的修复处理方案
    计算机等级考试【二级C语言程序设计】知识点整理
    MD 使用 i5ting_toc 转换成 HTML
    Windows10 图标变白修复
    【已解决】老型号电脑需要按F1键才能进入系统
    【已解决】什么是心跳包?
  • 原文地址:https://www.cnblogs.com/qxynotebook/p/7119119.html
Copyright © 2011-2022 走看看