程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java外部類之間的閉包和回調詳解

Java外部類之間的閉包和回調詳解

編輯:關於JAVA

Java外部類之間的閉包和回調詳解。本站提示廣大學習愛好者:(Java外部類之間的閉包和回調詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java外部類之間的閉包和回調詳解正文


媒介

閉包(closure)是一個可挪用的對象,它記載了一些信息,這些信息來自於創立它的感化域。經由過程這個界說,可以看出外部類是面向對象的閉包,由於它不只包括核心類對象(創立外部類的感化域)的信息,還主動具有一個指向另外圍類對象的援用,在此感化城內,外部類有權操作一切的成員,包含private成員。

Java最惹人爭議的成績之一就是,人們以為Java應當包括某品種似指針的機制,以許可回調(callback)。經由過程回調,對象可以或許攜帶一些信息,這些信息許可它在稍後的某個時辰挪用初始的對象。假如回調是經由過程指針完成的,那末就只能寄願望於法式員不會誤用該指針。

1、成員外部類

可以把一個外部類看作一個成員。成員外部類可以無前提拜訪內部類的一切成員屬性和成員辦法。

class OutterClass {//內部類
 private int in = 0;
 static int inn=4;
 public OutterClass(int in) {
   this.in = in;
 }
 class InnerClass {   //外部類
   public void output() {
     System.out.println(in);
     System.out.println(inn);
   }
 }
}

當做員外部類具有和內部類同名的成員變量或許辦法時,默許情形下拜訪的是成員外部類的成員。假如要拜訪內部類的同名成員,須要以上面的情勢停止拜訪:

OutterClass(內部類).this.成員

內部類拜訪外部類,必需先創立一個成員外部類的對象,再經由過程指向這個對象的援用來拜訪。

class OutterClass {
 private int in = 0;
 static int inn=4;
 public OutterClass(int in) {
   InnerClass inner=new InnerClass();
   this.in=inner.innerNum;
 }
 class InnerClass {  //外部類
   public int innerNum=1;
   public void output() {
     System.out.println(in);
     System.out.println(inn);
     int a=OutterClass.this.inn;
   }
 }
}

成員外部類是依靠內部類而存在的,也就是說,假如要創立成員外部類的對象,條件是必需存在一個內部類的對象。創立成員外部類對象的普通方法以下:

public class classa {
 public static void main(){
   OutterClass oc=new OutterClass(3);
   OutterClass.InnerClass in=oc.new InnerClass();
 }
}

2、部分外部類

部分外部類就像是辦法外面的一個部分變量一樣,是不克不及有publicprotectedprivatestatic潤飾符的。

class OutterClass {
 public OutterClass(int in) {
   class InnerClass {  //部分外部類
      int innerNum=1;
   }
 }
}

3、嵌套外部類

嵌套外部類,就是潤飾為static的外部類。聲明為static的外部類,不須要外部類對象和內部類對象之間的接洽,就是說我們可以直接援用outer.inner,即不須要創立內部類,也不須要創立外部類。

class OutterClass {
 public OutterClass(int in) {    
 }
 static class InnerClass {  //部分外部類
   int innerNum=1;
 }
}
public class classa {
 public static void main(){
   OutterClass.InnerClass in=new OutterClass.InnerClass();
 }
}

4、匿名外部類

匿名外部類是我們應用最多的,由於我們其實不想給它付與名字,因而就有了匿名。匿名外部類須要提早界說的。

btnSan.setOnClickListener(newOnClickListener() {
  @Override
  publicvoidonClick(View v) {
  }
});

5、閉包和回調

閉包(Closure)是一種能被挪用的對象,它保留了創立它的感化域的信息。JAVA其實不能顯式地支撐閉包,然則在JAVA中,閉包可以經由過程“接口+外部類”來完成。

例如:一個接口法式員和一個基類作家都有一個雷同的辦法work,雷同的辦法名,然則其寄義完整分歧,這時候候就須要閉包。

class Writer {//作家基類
 void work(){};
}
interface programmer{//法式員接口
 void work();
}

閉包完成代碼以下:

public class WriterProgrammer extends Writer {
 @Override
 public void work(){
   //寫作
 }
 public void code(){
   //寫代碼
 }
 class ProgrammerInner implements programmer{
   @Override
   public void work(){
     code();
   }
 }
}

在子類中界說了遵守法式員接口規矩的外部類,然後應用外部類完成法式員的work()辦法回調code()辦法,在子類中直接完成父類作家的work()辦法。

6、外部類的感化

外部類可以很好的完成隱蔽。

普通的非外部類,是不許可有 private protected權限的,但外部類可以

外部類具有核心類的一切元素的拜訪權限

可是完成多重繼續

可以免修正接口而完成統一個類中兩種同名辦法的挪用。

7、總結

以上就是這篇文章的全體內容,願望對年夜家進修或應用Java能有必定的贊助,假如有疑問年夜家可以留言交換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved