1.接口内部的类:接口不能实例化,内部接口就需要定义成静态的。内部类接口不管有没有声明static,都是静态的。类里面包含两部分:一部分是固定的,另一部分是可变的,而这个可变的部分就变成了接口。
class B3 {
interface A {
String a();
}
}
public class Test19 {
public static void main(String[] args) {
B3.A a1 = new B3.A() {
@Override
public String a() {
return "a()";
}
};
System.out.println(a1.a());
}
}
2.从多层嵌套类中访问外部类的成员:一个内部类被嵌套多少层并不重要,它能透明的访问所有它所嵌入的外部类的所有成员。如果有多个外部类具有同名同参的方法,则会调用最里层的方法,如果想调用上一层方法则必须要指定他的类名.this.方法名。".new"语法可以不必在调用构造器是限定类名。
class A {
private void a() {
}
class B {
private void b() {
}
public class C {
void c() {
b();
a();
}
}
}
}
public class Test20 {
public static void main(String[] args) {
A a1 = new A();
A.B ab = a1.new B();
A.B.C abc = ab.new C();
abc.c();
}
}
3.为什么需要内部类:内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外部类的对象。每个内部类都可以独立于实现进行继承,因此外部类是否已经继承了实现并不重要。 内部类的特性:内部类可以有多个实例,每个实例都有自己的状态信息,并且独立于其外部类对象的信息;在单个外部类中,可以让多个内部类以不同的方式实现相同的接口,或从相同的类继承;创建内部类对象的时刻并不依赖于外围类对象的创建。
interface A4 {
}
interface B4 {
}
class C4 implements A4, B4 {
}
class D4 implements A4 {
B4 b4() {
return new B4() {
};
}
}
public class Test21 {
static void testA(A4 a) {
}
static void testB(B4 b) {
}
public static void main(String[] args) {
C4 c = new C4();
D4 d = new D4();
testA(c);
testA(d);
testB(c);
testB(d.b4());
}
}
本文探讨了Java内部类的静态特性、访问外部类成员的透明性,以及内部类的作用,包括继承和实现接口、维护状态独立性及多态示例。通过实例展示了如何利用内部类实现不同功能和设计模式。
1万+

被折叠的 条评论
为什么被折叠?



