内部类(二)
1.4 嵌套类
不需要内部类对象与其外围类对象之间有联系,将内部类声明为static。这通常被称为嵌套类。
在一个普通的(非static)内部类中,通过一个特殊的this引用可以链接到其外围类对。而嵌套类没有这个特殊的this引用,这使它类似于一个static方法
- 1)要创建嵌套类的对象,并不需要其外围类的对象。
- 2)不能从嵌套类的对象中访问非静态的外围类对象。
interface Destination {
String readLabel();
}interface Contents {
int value();
}public class Parcel2 {private static class ParcelContents implements Contents {
private int i = 11;
@Override
public int value() {
return i;
}
}private static class ParcelDestination implements Destination {
private String label;
private ParcelDestination(String whereTo) {
label = whereTo;
}@Override
public String readLabel() {
return label;
}public static void f() {}static int x = 10;
static class AnotherLevel {
public static void f() {}static int x = 10;
}
}public static Destination destination(String s){
return new ParcelDestination(s);
}public static Contents contents(){
return new ParcelContents();
}public static void main(String[] args) {
Contents c = contents();
Destination d = destination("China");
}
}
1.4.1 接口内部的类
正常情况下,不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分。放在接口中的任何类型都自动地是public和static地。所以我们可以将类名为为下例所示,甚至可以在内部类中实现其外围接口。
public interface ClassInInterface {
void howdy();
class Test implements ClassInInterface{
@Override
public void howdy() {
System.out.println("Howdy!");
}public static void main(String[] args) {
new Test().howdy();
}
}
}
运行结果:
Howdy!
当我们想要创建某些公共代码,使得它们可以被某个接口的所有不同实现所共用,那么我们就可以使用接口内部的嵌套类。
1.4.2 从多层嵌套类中访问外部类的成员
一个内部类被嵌套多少层并不重要——它能透明地访问所有它所嵌入的外围类的所有成员。
class MNA {
private void f() {
System.out.println("f()");
}class A {
private void g() {
System.out.println("g()");
}public class B {
void h() {
System.out.println("h()");
g();
f();
}
}
}
}public class MultiNestingAccess {
public static void main(String[] args) {
MNA mna = new MNA();
MNA.A mnna = mna.new A();
MNA.A.B mnnab = mnna.new B();
mnnab.h();
}
}
运行结果:
h()
g()
f()
【内部类(二)】从例子中我们可以知到MNA.A.B中,调用方法g()和h()不需要任何条件(即使它们被定义为private)。
- 内部类(一)https://www.jianshu.com/p/563a5c69a152
- 内部类(二)https://www.jianshu.com/p/5b32ada40b0d
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 赢在人生六项精进二阶Day3复盘
- 2019年12月24日
- 陇上秋二|陇上秋二 罗敷媚
- 一百二十三夜,请嫁给我
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 迷失的世界(二十七)
- 你有婚内虐待行为吗()