javase -- 内部类


内部类(Inner class).

  • 成员内部类
    • 静态成员内部类
    • 非静态成员内部类
  • 局部内部类
    • 方法内
    • 代码块内
    • 构造器内

成员内部类.

一方面,作为外部类的成员

  • 调用外部类的结构 外部类.this.结构名结构名(在不重名的情况下)
  • 可以被static修饰
  • 可以被publicprotected缺省private修饰

另一方面,作为一个类

  • 类内部可以定义属性、方法、构造器、代码块、内部类
  • 可以被final修饰(不能被继承)
  • 可以被abstract,则是一个抽象内部类,不能实例化

成员内部类几乎可以被所有修饰符修饰

public class OuterClass {

    //成员内部类
    //1.静态成员内部类
    static class StaticInnerClass{

    }
    //2.非静态成员内部类
    class InnerClass{

    }

    public OuterClass() {
        // 构造器内 内部类
        class ConstructorInnerClass{

        }
    }

    void run() {
        //方法内 内部类
        class MethodInnerClass{

        }
    }
}

如何实例化成员内部类对象.

  • 创建静态内部类对象

    outerClass.innerClass inner = new outerClass().innerClass();
  • 创建非静态内部内对象

    //1
    outerClass outer = new outerClass();
    outerClass.innerClass inner = outer.new innerClass();
    
    //2
    outerClass.innerClass inner = new outerClass().new innerClass();

局部内部类.

以方法内举例

例子:获取接口实现类

// 获取 Comparable接口的实现类
public Comparable getComparable(){
    //创建一个实现了Comparable接口的类: 局部内部类
    //方式一:
    /*
    class MyComparable implements Comparable{
        @Override
        public int compareTo(Object o){
            return 0;
        }
    }
    return new MyComparable();
    */

    //方式二: 匿名内部类
    return new Comparable(){
        @Override
        public int compareTo(Object o){
            return 0;
        }
    };
}

匿名内部类.

没有名字的内部类

  • 匿名子类的匿名对象(继承了父类(也包含抽象类))

    new 父类名(){ //可以写类的结构 } –> 这是一个对象

    如果是抽象类的话,必须重写所有抽象方法,因为只有重写了抽象方法,才能实例化

  • 匿名实现类的匿名对象(实现了接口)

    new 接口名(){ //实现接口的方法 } –> 这是一个对象


文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
javase -- 异常 javase -- 异常
异常. 在程序执行中发生的不正常情况 语法错误和逻辑错误都不是异常 异常(广义)分为 Error:java虚拟机无法解决的严重错误,一般不编写针对性代码进行处理 JVM系统内部错误 资源耗尽 。。。 Exception:其他因编程错
2020-07-30 liuminkai
下一篇 
javase -- 代理模式 javase -- 代理模式
代理模式. 为其他对象提供一种代理以控制对这个对象的访问 代理类和被代理类都是某个接口的的实现类 静态代理 //静态代理 interface NetWork{ void browse(); } class Server impl
2020-07-30
  目录