• Java初学(七)


    一、内部类

      1、内部类概述:把类定义在其他类内部,这个类被称为内部类(内部类可以使用static修饰,外部类不可)

      2、内部类访问特点:内部类可以直接访问外部类成员,包括私有的

                   外部类要访问内部类的成员,必须创建对象

      3、内部类位置:

          成员位置:在成员位置定义的类,被称为成员内部类

          局部位置:在局部位置定义的类,被称为局部内部类

      4、成员位置内部类案例

        内部类和外部类没有继承关系

        通过外部类限定this对象

      5、局部位置内部类

        可以直接访问外部类成员

        在局部位置可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

        局部内部类访问局部变量必须用final修饰,原因:局部变量是随着方法的调用而调用,随着方法使用完毕而消失,而堆内存的内容不会立即消失(要等垃圾回收器空闲时才回收垃圾变量)。局部变量加final修饰后变为常量,经反编译可看到,局部内部类访问的变量直接是常量而非变量

     

      6、匿名内部类(内部类的简化写法)

        前提:存在一个类或者接口(这里的类可以是具体类也可以是抽象类)

        格式: new  类名或者接口名(){

              重写方法;

            }

        本质:是一个继承了该类或实现了该接口的子类匿名对象

        案例:

     1 interface Inter {
     2     public abstract void show();
     3     public abstract void show2();
     4 }
     5 class Outer {
     6     public void method() {
     7             Inter i = new Inter() { //多态
     8             public void show() {
     9                 System.out.println("show");
    10             }
    11             
    12             public void show2() {
    13                 System.out.println("show2");
    14             }
    15         };
    16         
    17         i.show();
    18         i.show2();
    19     }
    20 }
    21 class InnerClassDemo6 {
    22     public static void main(String[] args) {
    23         Outer o = new Outer();
    24         o.method();
    25     }
    26 }

    7、

    匿名内部类面试题:
    按照要求,补齐代码
    interface Inter { void show(); }
    class Outer { //补齐代码 }
    class OuterDemo {
    public static void main(String[] args) {
    Outer.method().show();
    }
    }
    要求在控制台输出”HelloWorld”

     1 interface Inter { 
     2     void show(); //public abstract void show();
     3 }
     4 class Outer { 
     5     //补齐代码
     6     public static Inter method() {
     7         //子类对象 -- 子类匿名对象
     8         return new Inter() {
     9             public void show() {
    10                 System.out.println("HelloWorld");
    11             }
    12         };
    13     }
    14 }
    15 class OuterDemo {
    16     public static void main(String[] args) {
    17         Outer.method().show();
    18         /*
    19             1:Outer.method()可以看出method()应该是Outer中的一个静态方法。
    20             2:Outer.method().show()可以看出method()方法的返回值是一个对象。
    21                 又由于接口Inter中有一个show()方法,所以我认为method()方法的返回值类型是一个接口。
    22         */
    23     }
    24 }
    匿名内部类面试题
  • 相关阅读:
    javaScript 事件循环机制
    javaScript 原型与原型链
    清除浮动
    水平垂直居中的实现
    GitLab + Jenkins + Harbor 工具链快速落地指南
    a标签下载存储在项目中的文件
    判断数组对象中某一属性是否包含重复的值
    网站title前的小图标
    给二维数组动态赋值
    格式化eltable中的时间
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4525052.html
Copyright © 2020-2023  润新知