Thinking In Java 学习笔记 10.内部类

内部类 innerClass :将一个类的定义置于另一个类内部
外部类 enclosingClass
内部类是一种名字隐藏和组织代码的形式,当生成一个内部类对象时,此对象与制造它的外围对象之间就有了一种联系(内部类非static才能产生联系)。所以它能访问其外围对象的所有成员,内部类还拥有其外围类的所有元素的访问权。
没有外部类对象,无法创建非静态内部类对象,因为内部类对象会暗暗地连接到创建它的外部类对象上,需要对象.new或通过另一个方法返回一个内部类。

P196练习 11 realize.RealizeContents ??? private
匿名内部类 没有名字、没有构造方法
return new 内部类(){ *** }
如果定义一个匿名内部类并希望它使用一个在其外部定义的对象,那么其参数引用必须是final的
P198 参数final parcel9 ???
可以用实例初始化的形式达到构造器的效果。
使用匿名内部类创建一个对象,域
public static ServiceFactory factory = new ServiceFactory() {
public Service getService() {
return new Impl1();
}
};

return new Destination(){
private String label = dest;
public String readLabel() {
return label;
}
};

E makeE() {
return new E() {};
} //继承接口或类

使用匿名内部类,在商品类内部创建工厂类对象
嵌套类 (静态内部类)不需要对外部类对象的引用
普通内部类对象隐式地保存了一个引用,指向创建它的外围对象。
嵌套类:用static声明,创建时不需要外围类的对象,不能从嵌套类的对象中访问外围类对象。 普通内部类的字段和方法,只能放在类的外部层次,所以不能有static数据和字段,也不能包含嵌套类,但是嵌套类可以包含这些。
接口内部的类自动都是public和static的。 接口中创建嵌套类作为公共代码,使得它们可以被接口的所有不同实现所共用。
可以通过嵌套类在每个类中实现public static void main
多层嵌套类,内部类能访问它所嵌入的所有外部类的所有成员。

每个内部类都只能独立的继承一个接口或类,所以可以用内部类实现多重继承。
闭包与回调
闭包是一个可调用的对象,记录了来自它的作用域的一些信息
内部类是面向对象的闭包,因为它包含外围类对象,自动拥有指向此对象的引用,在作用域内允许操作所有成员。
通过内部类提供闭包的功能实现回调

应用程序 框架 就是用于解决特定问题的一个或一组类
P208 Controller,java ???
继承内部类,其他类继承内部类时需要 enclosingClassReference.super();
即外部类的引用.super();
当只是外部类A继承外部类B时,A和B中的同名内部类没有任何关联,不能覆盖。而当A的内部类AA明确继承B的内部类BB时,是可以继承的。
可以在代码块里创建局部内部类
Counter getCounter(final String name) {
class LocalCounter implements Counter {
//Local inner class can have a constructor
public LocalCounter() {
System.out.println("LocalCounter()");
}
public int next() {
System.out.print(name);
return count++;
}
}
return new LocalCounter();
}

猜你喜欢

转载自blog.csdn.net/jjj1299894209/article/details/80894655
今日推荐