⑴ java 靜態內部類的使用
Java語言允許在類中再定義類,這種在其它類內部定義的類就叫內部類。內部類又分為:常規內部類、局部內部類、匿名內部類和靜態嵌套類四種。
1、靜態內部類定義
靜態內部類,定義在類中,任何方法外,用static定義;靜態內部類只能訪問外部類的靜態成員。
生成(new)一個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。靜態內部類的對象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通過生成外部類對象來生成。這樣實際上使靜態內部類成為了一個頂級類。可以定義私有靜態內部類。
2、java實現靜態內部類注意事項
將某個內部類定義為靜態類,跟將其他類定義為靜態類的方法基本相同,引用規則也基本一致。不過其細節方面仍然有很大的不同。具體來說,主要有如下幾個地方要引起注意。
1)一般情況下,如果一個內部類不是被定義成靜態內部類,那麼在定義成員變數或者成員方法的時候,是不能夠被定義成靜態成員變數與靜態成員方法的。也就是說,在非靜態內部類中不可以聲明靜態成員
2)一般非靜態外部類可以隨意訪問其外部類的成員變數以及方法(包括聲明為private的方法),但是如果一個內部類被聲明為static,則其在訪問包括自身的外部類會有諸多的限制。靜態內部類不能訪問其外部類的非靜態成員變數和方法
3)在一個類中創建非靜態成員內部類的時候,有一個強制性的規定,即內部類的實例一定要綁定在外部類的實例中。然後要在一個外部類中定義一個靜態的內部類,不需要利用關鍵字new來創建內部類的實例。即在創建靜態類內部對象時,不需要其外部類的對象
3、靜態內部類示例
java在實現LinkedList時使用了如下內部類:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
........
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}
........
}
這里即靜態內部類的典型用法
⑵ java內部調用內部方法的問題
Java內部調用內部方法主要是通過內部類實現。Java內部類分兩種,成員內部類和方法內部類。
代碼如下:
1.成員內部類
/**
*成員內部類
*/
publicclassOuter{
privateintouter=1;
classInner{
publicvoidshow(){
System.out.println("outer="+outer);
}
}
publicstaticvoidmain(String[]args){
Outer.Innerin=newOuter().newInner();
in.show();
}
}
2.方法內部類
/**
*方法內部類
*
*/
publicclassOuter2{
privateintouter=1;
publicvoidshowOut(){
classInner{
publicvoidshow(){
System.out.println("outer="+outer);
}
}
newInner().show();
}
publicstaticvoidmain(String[]args){
Outer2in=newOuter2();
in.showOut();
}
⑶ Java 類中類 是怎麼實現的
有class修飾符,用來創建一個類,其中有成員函數和成員變數。通過new一個對象出來,通過對象來實現這個類