1. 程式人生 > >java下四種內部類

java下四種內部類

內部類一般來說包括這四種:成員內部類、區域性內部類、匿名內部類和靜態內部類

1.成員內部類(定義在類中的類叫成員內部類)

(1)成員內部類
public class DemolInnerClass {
    public static void main(String[] args) {
        //外部類名.內部類名 變數名= 外部類物件.內部類物件
        Outer.InnerClass oi = new Outer().new InnerClass();//外部類要訪問內部類的成員,必須建立物件。
        oi.getNumber();
    }
}


class Outer{
    /*public*/private int number = 10;//定義在類中的變數叫成員變數
    class InnerClass{//定義在類中的類叫做成員內部類
        public void getNumber(){
            System.out.println(number);//成員內部類可以直接訪問外部類的成員,包括私有
        }
    }
}

執行的結果:10

(2)成員內部類用private修飾,私有成員內部類

public class Demol2InnerClass {
    public static void main(String[] args) {
     OuterPrivate op = new OuterPrivate();
     op.getInnerPrivate();
    }
}

class OuterPrivate{
    private  int number = 10;
    private class InnerPrivate{ //成員內部類私有使用(private)
        public void  getNumber(){
            System.out.println(number);
        }
    }
 public void  getInnerPrivate(){//只能在外部類中建立內部物件進行訪問
     InnerPrivate ip = new InnerPrivate();
     ip.getNumber();
 }

}

2.區域性內部類

public class Demol3InnerClass {
    public static void main(String[] args) {
        OuterLocal outerLocal = new OuterLocal();
        outerLocal.LocalMethod();
    }
}
/* 區域性內部類:在方法中定義的內部類
 * 區域性內部類在訪問他所在方法中的區域性變數必須用final修飾,為什麼?
       因為當呼叫這個方法時,區域性變數如果沒有用final修飾,他的生命週期和方法的生命週期是一樣的,
       當方法彈棧,這個區域性變數也會消失,那麼如果區域性內部類物件還沒有馬上消失想用這個區域性變數,
       就沒有了,如果用final修飾會在類載入的時候進入常量池,即使方法彈棧,常量池的常量還在,
       也可以繼續使用
*/
class OuterLocal{
    public void LocalMethod(){

       class LocalInner{//區域性內部類:定義在成員方法中的類
           final int number = 10;
           public void getNumber(){
               System.out.println(number);
           }
       }
       LocalInner localInner = new LocalInner();
       localInner.getNumber();

    }
    /*public void run() {
        LocalInner localInner = new LocalInner();  //區域性內部類,只能在其所在的方法中訪問
        localInner.getNumber();
   }*/

}

3.靜態成員內部類,

public class Demol4InnerClass {
    public static void main(String[] args) {
        //外部類名.內部類名 物件名 = 外部類名.內部類物件;
        OuterStatic.Inner1 oi = new OuterStatic.Inner1();
        oi.method();
        OuterStatic.Inner2.print();
    }
    
}
class OuterStatic{
    static class Inner1{//靜態成員內部類:成員內部類被靜態修飾的類
        public void method() {
            System.out.println("method");
        }
    }
    
    static class Inner2{
        public static void print() {
            System.out.println("print");
        }
    }
}

4.匿名內部類,就是沒有名字的內部類

public class Demo1_NoNameInnerClass {
    public static void main(String[] args) {
        Outer1 outer1 = new Outer1();
        outer1.method();
    }
}
/* A:匿名內部類
   * 就是內部類的簡化寫法。
* B:前提:存在一個類或者介面
   * 這裡的類可以是具體類也可以是抽象類。
* C:格式:
      new 類名或者介面名(){
         重寫方法;
      }
* D:本質是什麼呢?
   * 是一個繼承了該類或者實現了該介面的子類匿名物件。
*/
interface InnerInterface{
    public void print();
}
class Outer1{
    /*abstract*/ class Inner implements InnerInterface{
        public void print() {
            System.out.println("print");
        }
    }

    public void method(){
//        Inner i = new Inner();
//        i.print();
//        new Inner().print();//建立InnerInterface的子類Inner
//        InnerInterface i1 = new Inner();       //父類引用指向子類物件

//        上面的內部類可以用匿名內部類來實現
        new Inner(){
            public void print() {
                System.out.println("print");
            }
        }.print();
    }
}

相關推薦

java部類

內部類一般來說包括這四種:成員內部類、區域性內部類、匿名內部類和靜態內部類 1.成員內部類(定義在類中的類叫成員內部類) (1)成員內部類 public class DemolInnerClass { public static void main(String[

JAVA部類及為什麼要用部類

        最近在看java的原始碼,但是時長能看一個類中都會有幾個內部類比如LinkedList中private class ListItr implements ListIterator<E> { private Node<E>

java 部類區別

Java中的內部類共分為四種:  靜態內部類static inner class (also called nested class)  成員內部類member inner class  區域性內部類local inner class  匿名內部類anonymous inn

java 部類 使用細節(含程式碼)

一: 內部類     定義在類體部,方法體部,甚至比方法體更小的程式碼塊內部的類(if 語句裡面等)    1.靜態內部類(內部類中最簡單的形式)         1.宣告在類體部,方法體外,並且使用static修飾的內部類         2.訪問特點可以類比靜態變數和靜

Java 部類

1、成員內部類: 即作為外部類的一個成員存在,與外部類的屬性、方法並列。 注意:成員內部類中不能定義靜態變數,但可以訪問外部類的所有成員。 public class Outer{ private static int i = 1; private int j=10; private int k=20; pub

java部類詳解

一般來說,有4中內部類:常規內部類、靜態內部類、區域性內部類、匿名內部類。  一.常規內部類:常規內部類沒有用static修飾且定義在在外部類類體中。   1.常規內部類中的方法可以直接使用外部類的例項變數和例項方法。   2.在常規內部類中可以直接用內部類建立物件  

部類簡單介紹(inner class)

1.靜態內部類(static inner class): 只能訪問外部類的靜態成員變數和靜態方法,生成靜態內部類的方式為:StaticInner.Inner inner=new StaticInne

從零開始學Java之五部類將執行緒隱藏類中

1.使用普通內部類繼承Thread類 <code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box;

java的4部類

原文連結:https://blog.csdn.net/ll530304349/article/details/52926848一直對內部類、靜態內部類這些名詞的認識不太清晰,做一些小小的總結。 一、什麼是巢狀類(nested class)? 首先Java中的巢狀類(neste

java部類與多重繼承

內部類定義:一個定義在類內部的類。之所以用內部類是因為使用內部類最吸引人的原因是:每個內部類都能獨立地繼承一個(介面的)實現,所以無論外圍類是否已經繼承了某個(介面的)實現,對於內部類都沒有影響。可以這樣說,介面只是解決了部分問題,而內部類使得多重繼承的解決方案變得更加完整。

部類,(Inner Class)

內部類: 定義在內部的類,不一定非得是定義在類的內部, 可以分為4種類型。 第一: 靜態內部類(定義在類中) 靜態的內部類與其外部類是編譯成 兩個.class檔案 的,注意的是外部類是不可以定義為靜態的。 為什麼外部的類不可以定義為靜態的 解釋

java基礎:熟悉3部類的寫法,重點匿名部類的使用

package methodinner;public class Test { class Duanzanshichangzheng { public void noProblem() { System.out.println("患有急性短暫失常症,開車撞死人沒事"

Java中的三部類

內部類 內部成員類:和成員方法並列,無static修飾 嵌入類:和成員方法並列,並且有static修飾 本地類:在成員方法中定義的類 例項如下:OuterClass是一個外部類,裡面定義了三個內部類InnerClass、NestedClass、MethodClass分別對應

Java開發筆記(五十部類和嵌套類

pro get print 資源 sys 文件 stat 解決 運用 通常情況下,一個Java代碼文件只定義一個類,即使兩個類是父類與子類的關系,也要把它們拆成兩個代碼文件分別定義。可是有些事物相互之間密切聯系,又不同於父子類的繼承關系,比如一棵樹會開很多花朵,這些花兒作為

java訪問修飾符

pub oid 默認 成員變量 修飾 對象 fault 其中 () Java中的四種訪問修飾符:public、protected、default(無修飾符,默認)、private。 四種修飾符可修飾的成分(類、方法、成員變量) public protect

java公開課-03-部類

多重繼承 nbsp 局部內部類 sta ati 如果 權限 接口 隱藏 內部類  ().內部類的作用.    1.實現了內部類的隱藏.    2.實現了多重繼承.    3.內部類擁有所有外部類所擁有的屬性和方法的訪問權限.    4.避免修改接口的時候出現同名方法.   

java中的匿名部類總結

但是 star per 處的 書寫 括號 art log num 匿名內部類也就是沒有名字的內部類 正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫 但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口 實例1:不使用匿名內部類來實現抽象方法

Java:詳解部類

進行 system 創建 經典 生成 接口 為什麽 bsp 產生 可以將一個類的定義放在另一個類的定義內部,這就是內部類。 內部類是一個非常有用的特性但又比較難理解使用的特性(鄙人到現在都沒有怎麽使用過內部類,對內部類也只是略知一二)。 第一次見面

java中的匿名部類

匿名內部類/* 知識點:匿名內部類 作用: 匿名內部類也就是沒有名字的內部類 正因為沒有名字,所以匿名內部類只能使用一次,它通常用來簡化代碼編寫 但使用匿名內部類還有個前提條件:必須繼承一個父類或實現一個接口 */ //抽象類 abstract class Person {

Java學習筆記23---部類之局部內部類只能訪問final的局部變量

結束 stat nal person pos 內部類 style inter 周期 局部內部類是定義在方法體或代碼塊中的類,在筆記19中已有過簡單介紹。 今天要討論的是局部內部類為什麽只能訪問為常量的局部變量。 作者: 博客園--蟬蟬 請尊重作者勞動成果,轉載請在標題註