java#内部类和嵌套类


内容思路来自Java编程思想,个人读书做的笔记,仅个人复习之用,故他人参考请自行辨别内容是否有错误。


 

在类的类部可以定义类,叫做内部类。如果这个内部类被static修饰,此时内部的类叫做嵌套类。

内部类用在哪里,解决了什么问题?


 

内部类中一定包含的有外部类的引用,即Outer.this,

故,创建内部类,必须拥有外部类的实例。

-

public class Outer {
    
    private String foo = "kitty";
    
    class Inner{
        Outer getOuter(){
            // 在内部类中,可以通过dot this语法引用外部对象
            // 即 Outer.this
            return Outer.this;
        }
        
        public void bar(){
            // 内部类可以访问外部类的任意属性
            System.out.println(foo);
        }
    }

    public static void main(String[] args) {
        // 同过外部类dot内部类的方式 声明一个引用
        Outer.Inner inner = null;
        
        // 通过外部类实例dot new的方式创建一个内部类的实例
        inner = new Outer().new Inner();
    }
}

- 


 

嵌套类:看一种单例的写法。

-

public class Singleton {
    private static Singleton instance = null;

    private static class Inner{
        static{
            instance = new Singleton();
        }
    }

    public static Singleton getInstance(){
        return instance;
    }
}

-

其实,单例其他的写法也有其他的

-

public class Singleton {
	private Singleton(){}
	private static class Inner{
		private static final Singleton INSTANCE = new Singleton();
	}
	
	public static Singleton getInstance(){
		return Inner.INSTANCE;
	}
} 

- 

 

值得思考的是,为啥会有内部类?内部类的出现解决了啥问题?这一部分需要多读几次java编程思想。我还是对这个东西不清不楚。

20190903:

1. 内部类可以理所当然的访问外部类的成员变量,就好像内部类原本就拥有他们似的;

2. 内部类区别于嵌套类,嵌套类不依赖于外部类,可以单独被实例化,但是内部类的实例化必须有外部类的实例;

3. 内部类的实例化必须要有外部类的实例,通过外部类实例点new的方式创建内部类实例;

4. 内部类好像可以屏蔽一些细节,外面的类看不到这些细节。同时内部类实现一些接口我继承一些类从而具有一定的功能,通过这些功能完成对外部类的数据进行操作,

    而且,内部类的这些功能,外面的内有看不到,这样可以避免一些特定的方法或实现被其他代码调用;

5.内部类中可以通过外部类点this表示外部类的this。入Outer.this,这就是对外部类的引用;

6.现在看来内部类就是为了操作外部类的数据而存在的吧,内部类封装了一些特定但是很私有的一些功能。

 

 

-


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM