Java: proxy 式组合关系
类和类之间有 3 种关系:组合、继承和代理 (proxy)。
类和类之间有 3 种关系:组合、继承和代理 (proxy)。
前面对继承的理解常常用到了这么一用表述:Base 的代码会被复制到 Ext 中。其实这么理解欠妥,看代码:
首先我们明确下 “enclose” 这个单词的逻辑关系:OuterClass encloses InnerClass,所以外部类就是 enclosing class,内部类是 enclosed class。
如果把 {...} 这么一段称为 “域”,那么方法 body 明显是一个域,方法 body 中的 if {} 或是 for {} 之类的也是域。在方法 body 或是方法 body 中其他域里定义的类就是局部内部类。
class Outer { public class Inner { public String getInnerClassName() { return Inner.this.getClass().toString(); // 'Inner' can be omitted here...
内部类的一个重要作用是隐藏继承或是对接口的实现,典型的形式是:内部类来继承或是实现接口,由外部类提供代理 constructor 方法。这些代理 constructor 方法一般都利用的向上转型,即不返回内部类对象,而是返回内部类继承的父类对象或是实现的接口对象。如:
一个 imp class 可以同时实现多个 interface,格式如下:
我们大可将 interface 视为 abstract class 的延伸。
覆写方法的访问权限不得低于被覆写方法的访问权限(或者说覆写方法不能拥有比被覆写方法更严格的访问权限)。