Interfaces
抽象类和抽象方法
包含抽象方法的类叫做抽象类,如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。如果从一个抽象类继承,并想创建该新类的对象,那么就必须为基类中的所有抽象方法提供方法定义。
接口
interface关键字使得抽象的概念更向前迈进一步。interface关键字产生一个完全抽象的类,其根本没有提供任何具体实现。接口可以包含域,但是这些域隐式地是static和final的。接口中定义的方法必须是public的,否则,其就只能得到默认的包访问权限。
完全解耦
将接口从具体实现中解耦使得接口可以应用于多种不同的具体实现,因此代码也就更具有可复用性。?
用接口实现多重继承
使用接口的核心原因是:为了能够向上转型为多个基类型以及由此带来的灵活性。第二个原因与使用抽象基类相同:防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。如何在接口和抽象类之间进行选择?如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。如果知道某事物应该成为一个基类,那么第一选择是使它成为一个接口。
通过继承来扩展接口
通过继承可以容易地在接口中添加新的方法声明,还可以通过继承在新接口中组合数个接口。注意在打算组合的不同接口中使用相同的方法名通常会造成代码可读性的混乱,需要尽量避免这种情况。
适配接口
接口最吸引人的原因之一是允许同一个接口有多个不同的具体实现。简单的情况中,它的体现形式通常是一个接受接口类型的方法,而该接口的实现和向该方法传递的对象则取决于方法的使用者。
接口中的域
接口中的任何域都自动是static和final的。
嵌套接口
接口与工厂
接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方式就是工厂方法设计模式。
Inner Classess
将一个类的定义放在另一个类的定义内部,这就是内部类。
创建内部类
如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象,那么必须像在main()方法中 那样,具体地指明这个对象的类型: OuterClassName.InnerClassName。
链接到外部类
当生成一个内部类的对象时,此对象与制造它的外围对象之间就有了一种联系,所以它能访问其外围对象的所有成员,而不需要任何特殊条件。此外,内部类 还拥有其外围类的所有元素的访问权。
使用.this与.new
内部类与向上转型
在方法和作用域内的内部类
匿名内部类
嵌套类
为什么需要内部类?
…?
不太看得懂,剩下的以后再补充