在Java中,一個類的定義可以放在另一個類裏面,這樣的類的稱爲內部類。內部類的格式如下:
package com.isoftstone.fulunyong;
public class Parcell {
class Contents {
private int i = 11;
public int value() {
return i;
}
}
class Destination {
private String label;
Destination(String whereTo) {
label = whereTo;
}
String readLabel() {
return label;
}
}
public void ship(String dest) {
Contents contents=new Contents();
Destination destination=new Destination(dest);
System.out.println(destination.readLabel());
}
public static void main(String[] args) {
Parcell parcell=new Parcell();
parcell.ship("Tasmania");
}
}
內部類具有以下特性:
1、內部類擁有所有其外部類的成員的訪問權;
2、成員內部類不能含有static修飾的變量和方法,因爲成員內部類需要先創建了外部類,才能創建它自己的;
3、內部類中生成外部類對象的引用,可以使用OutClassName.this;
4、從外部類的非靜態方法之外,創建某個內部類的對象:OutClassName.InnerClassName;
靜態的內部類也沒稱爲嵌套類,它與普通內部的區別:
(1)要創建嵌套類的對象,並不需要外圍類的對象;
(2)不能從嵌套類的對象中訪問非靜態的外圍類數據;
(3)嵌套類可以有static方法和域,還可以有嵌套類,普通內部類不可以。
我們知道在Java中的繼承是單繼承,就是一個Java類不能同時繼承兩個或兩個以上的類,但是我們可以根據內部類的特殊性質,曲線實現“多繼承”。比如B想要同時繼承E,F,我們可以這樣實現。
package com.isoftstone.fulunyong;
public class A extends E{
public void a() {
System.out.println("a");
}
class B extends F{
public void b() {
System.out.println("b");
a();
e();
}
}
public static void main(String[] args) {
B b=new A().new B();
b.b();
b.f();
}
}