接口,应该是软件开发中绕不过去的路
(真·) 简述接口
为了达到完全解耦的目的,接口扮演了重要角色。通常类的继承可能会限制代码的复用,接口可以解决这类问题。子类可以继承自一个具体类与多个接口,书写时具体类在前,接口在后,接口很重要建议自己看详细的书,配合多态与内部类更佳
接口就讲到这里了,告辞,开始内部类。
内部类
内部类的使用,内部类可以使代码的层次明晰。内部类的概念就是指在类的内部,定义其他类,这样,内部类可以与外部类进行通信。
内部类的使用方法之一是链接外部类,内部类可以随意的使用外围对象的所有成员,不需要其他任何特殊条件。
为什么内部类可以访问外部类的所有成员?当外部类创建时会创建内部类对象,内部类对象会捕获外部类对象的引用,所以内部类访问对象实际上是用外部类的引用进行访问
- 在内部类中创建外部类引用可以使用ClassName+.this.
- 在外部类创建内部类引用可以使用InnerClassName+.new.
匿名内部类(隐藏名称的内部类)
匿名内部类就是在new基类时,在其后加入子类的声明,并将子类对象向上转型后给予new的基类简化了代码的编写。
嵌套类(静态内部类)
嵌套类就是指的静态的内部类,类的声明前缀有static。
- 要创建嵌套类的对象,不需要创建外围类的对象;
- 要使用外围类对象时,被使用的外围类对象应该也是static属性;
- 普通内部类的字段和方法,不能再内部类中声明,应该在外围类声明,也就是说普通内部类不应该包含static字段与static数据,也不能包含嵌套类,但是嵌套类却可以。
- 通常情况下,接口内不能放置类,接口内部的属性默认是public与static,但是嵌套类却可以在其中使用,你可以在接口的内部类实现其外围类的接口。
闭包与回调
内部类是面向对象的闭包,闭包是指一个可调用的对象,它包含一些信息,这些信息来自于创建它的作用。因为内部类可以访问外围类的信息,还链接了外围类引用,故它是面向对象的闭包。
内部类的继承
内部类的继承不能直接通过外围类引用,必须在子类的构造器中声明,这样才能提供外围类的引用。
enClosingClassReference.super();
内部类的覆盖不会达到预期效果,因为不属于同一个命名空间。但是如果要实现也是可以,可以准确的继承内部类来达到效果。
局部内部类
局部内部类不能有修饰符,它不是外围类的一部分,但是它能够使用当前代码的常量以及外围类的所有成员。局部内部类是指在代码块中创建内部类。
内部类的标识符
内部类也会生成.class文件,他的命名方式是:外围类+$+内部类的名字
。如果是匿名内部类则是外围类名字+$+数字