1.4 嵌套類
不需要內(nèi)部類對象與其外圍類對象之間有聯(lián)系,將內(nèi)部類聲明為static。這通常被稱為嵌套類。
在一個普通的(非static)內(nèi)部類中,通過一個特殊的this引用可以鏈接到其外圍類對。而嵌套類沒有這個特殊的this引用,這使它類似于一個static方法
- 1)要創(chuàng)建嵌套類的對象,并不需要其外圍類的對象。
- 2)不能從嵌套類的對象中訪問非靜態(tài)的外圍類對象。
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 接口內(nèi)部的類
正常情況下,不能在接口內(nèi)部放置任何代碼,但嵌套類可以作為接口的一部分。放在接口中的任何類型都自動地是public和static地。所以我們可以將類名為為下例所示,甚至可以在內(nèi)部類中實(shí)現(xiàn)其外圍接口。
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();
}
}
}
運(yùn)行結(jié)果:
Howdy!
當(dāng)我們想要創(chuàng)建某些公共代碼,使得它們可以被某個接口的所有不同實(shí)現(xiàn)所共用,那么我們就可以使用接口內(nèi)部的嵌套類。
1.4.2 從多層嵌套類中訪問外部類的成員
一個內(nèi)部類被嵌套多少層并不重要——它能透明地訪問所有它所嵌入的外圍類的所有成員。
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();
}
}
運(yùn)行結(jié)果:
h()
g()
f()
從例子中我們可以知到MNA.A.B中,調(diào)用方法g()和h()不需要任何條件(即使它們被定義為private)。
- 內(nèi)部類(一)http://www.itdecent.cn/p/563a5c69a152
- 內(nèi)部類(二)http://www.itdecent.cn/p/5b32ada40b0d