首頁  >  文章  >  Java  >  java 內部類別(匿名類,匿名對象,靜態內部類別)詳解及實例

java 內部類別(匿名類,匿名對象,靜態內部類別)詳解及實例

高洛峰
高洛峰原創
2017-01-11 15:38:451466瀏覽

內部類別的介紹

定義在另外一個類別中的類,叫內部類別

成員內部類別

1..new 建立成員內部類別必須先建立外部類別的實例,然後透過.new 建立內部類別的物件

2..this 可以透過外部類別的類別名稱.this去存取外部類別的所有屬性和方法。

public class Test1 {
 
  String name = "asnd";
 
  public static void main(String[] args) {
 
    Test1 test1 = new Test1();
    Inner mInner = test1.new Inner();
    mInner.print();
  }
 
  void show() {
    System.out.println("show");
  }
 
  public class Inner {
 
    String name = "123";
    private void print(){
      show();
      System.out.println(name);//打印的是123
      System.out.println(Test1.this.name);//打印的是asnd
    }
  }
}

匿名內部類別

沒有名字的類別,創建類別的同時,也會建立一個物件。

只需要用到一次的類別,就可以使用匿名內部類別

File file = new File("D:/cc.txt") {
 
    @Override
    public boolean delete() {
      System.out.println("是否删除y/n");
      Scanner input = new Scanner(System.in);
      String str = input.next();
      if (str.equals("y")) {
        return super.delete();
      }
      System.out.println("删除失败");
      return false;
    }
  };
  file.delete();
 
}

匿名物件

該物件只需要存取一次.

new Thread() {
 
      @Override
      public void run() {
        System.out.println("线程开始!");
        try {
          Thread.sleep(2000);
          System.out.println("线程结束!");
        } catch (Exception e) {
          e.printStackTrace();
        }
        super.run();
      }
 
    }.start();

靜態內部類別

1.的方法和變量,不能存取非靜態。

2.靜態內部類別可以不需要建立外部類別的引用,而直接建立。

匿名內部類別存取局部變數

內部類別存取局部變數必須final,如果沒有加,jdk1.8預設加上去了
當所使用的變數是在變的時候可以用下面的方法,也可以把下面的i在開始的時候定為靜態的

for (int i = 0; i < 5; i++) {
      final int finali = i;
      new Thread() {
        public void run() {
          System.out.println(finali);
        };
      }.start();
 
    }

下面介紹一下內部類的實現技巧

public static void main(String[] args) {
    Lam mLam = new Lam();
    //第一种实现的方法
    mLam.to(new Ligh() {
      @Override
      public void shin() {
        System.out.println("on的第一种方法");
      }
    });
    //第二种实现方法
    class MyLam implements Ligh{
 
      @Override
      public void shin() {
        System.out.println("第二种");
 
      }}
 
    mLam.to(new MyLam());
  }
}
 
interface Ligh {
  void shin();
}
 
class Lam {
  public void to(Ligh ligh) {
    ligh.shin();
    System.out.println("on");
  }
}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

更多java 內部類(匿名類,匿名對象,靜態內部類)詳解及實例相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn