亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java匿名內部類實例簡析

2019-11-26 16:17:16
字體:
來源:轉載
供稿:網友
匿名類是不能有名稱的類,所以沒辦法引用它們。必須在創建時,作為new語句的一部分來聲明它們。這就要采用另一種形式的new語句,如下所示: new <類或接口> <類的主體> 這種形式的new語句聲明一個新的匿名類,它對一個給定的類進行擴展,或者實現一個給定的接口。它還創建那個類的一個新實例,并把它作為語句的結果而返回。要擴展的類和要實現的接口是new語句的操作數,后跟匿名類的主體。如果匿名類對另一個類進行擴展,它的主體可以訪問類的成員、覆蓋它的方法等等,這和其他任何標準的類都是一樣的。如果匿名類實現了一個接口,它的主體必須實現接口的方法。
java 代碼
復制代碼 代碼如下:

interface pr
{
void print1();
}
public class noNameClass
{
public pr dest()
{
return new pr(){
public void print1()
{
System.out.println("Hello world!!");
}
};
}
public static void main(String args[])
{
noNameClass c = new noNameClass();
pr hw=c.dest();
hw.print1();
}
}

pr也可以是一個類但是你外部調用的方法必須在你的這個類或接口中聲明外部不能調用匿名類內部的方法
Java中內部匿名類用的最多的地方也許就是在Frame中加入Listner了吧。
如下:
java 代碼
復制代碼 代碼如下:

import java.awt.*;
import java.awt.event.*;
public class QFrame extends Frame {
public QFrame() {
this.setTitle(/"my application/");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
this.setBounds(10,10,200,200);
}
}

內部匿名類,就是建立一個內部的類,但沒有給你命名,也就是沒有引用實例的變量。
復制代碼 代碼如下:

new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}

new 是建立一個 WindowAdapter對象 ,后面一個 {} 表示這個括號中的操作作用于這個默認的對名象,而上面的Java程序中后面是一個函數體。
這個用法的作用是:創建一個對象的實例,并且 override 它的一個函數。打開 WindowAdapter 的代碼可以發現。它是一個抽象類。它是對 WindowListener 接口的一個實現。Frame.addWindowListner(); 的參數是一個 WindowListner ,而實現上是傳一個從WindowAdapter 派生出的一個匿名類。
1.怎樣判斷一個匿名類的存在?。靠床灰娒?,感覺只是父類new出一個對象而已,沒有匿名類的名字。
先看段偽代碼
復制代碼 代碼如下:

abstract class Father(){
....
}
public class Test{
Father f1 = new Father(){ .... } //這里就是有個匿名內部類
}

一般來說,new 一個對象時小括號后應該是分號,也就是new出對象該語句就結束了。
但是出現匿名內部類就不一樣,小括號后跟的是大括號,大括號中是該new 出對象的具體的實現方法。
因為我們知道,一個抽象類是不能直接new 的,必須先有實現類了我們才能new出它的實現類。
上面的偽代碼就是表示new 的是Father的實現類,這個實現類是個匿名內部類。
其實拆分上面的匿名內部類可為
復制代碼 代碼如下:

class SonOne extends Father{
...//這里的代碼和上面匿名內部類,大括號中的代碼是一樣的
}
public class Test{
Father f1 = new SonOne() ;
}

2.匿名內部類的注意事項
注意匿名類的聲明是在編譯時進行的,實例化在運行時進行。這意味著for循環中的一個new語句會創建相同匿名類的幾個實例,而不是創建幾個不同匿名類的一個實例。
在使用匿名內部類時,要記住以下幾個原則:
 ?匿名內部類不能有構造方法。
 ?匿名內部類不能定義任何靜態成員、方法和類。
 ?匿名內部類不能是public,protected,private,static。
 ?只能創建匿名內部類的一個實例。
?一個匿名內部類一定是在new的后面,用其隱含實現一個接口或實現一個類。
 ?因匿名內部類為局部內部類,所以局部內部類的所有限制都對其生效。
?內部類只能訪問外部類的靜態變量或靜態方法。
匿名類和內部類中的中的this :
有時候,我們會用到一些內部類和匿名類。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名
3.匿名內部類的作用
Java的內部類和C++中的嵌套類有本質的不同:C++的嵌套類沒有指向包裝類的句柄。僅僅表達一個封裝的概念;但是Java的內部類不同,它可以訪問包裝類的成員(這表示它擁有指向包裝類的句柄)。
匿名內部類是內部類的一種簡化寫法:return new Wrapper {
...
};
等價于:Wrapped extends Wrapper {
...
}
return new Wrapped();
難道匿名內部類就只這一點作用嗎?
考慮一下這樣的case:
復制代碼 代碼如下:

interface ICount {
int count();
}
class Parent {
int i = 0;
int count() {
return i++;
}
}

有一個類Child,它既想繼承Parent的count()方法,又想實現ICount接口中的count方法,這個時候怎么辦呢?內部類就可以大顯身手了:
復制代碼 代碼如下:

class Child extends Parent {
ICount getCount() {
return new ICount {
int i = 0;
int count() {
return (i *= 2);
}
}
}
}

看這段代碼
復制代碼 代碼如下:

public static void main(String[] args) {
theApp = new Analyzer();
SwingUtilities.invokeLater(new Runnable() { // Anonymous Runnable class
// object
public void run() { // Run method executed in thread
theApp.creatGUI(); // Call static GUI creator
}
});
}
public static void main(String[] args) {
theApp = new Analyzer(); // 創建一個對象
SwingUtilities.invokeLater(new Runnable() { // Anonymous Runnable class
// 一個匿名內部類,他實現了一個線程
// 原本這個方法是傳一個Runnable類型參數 // 這里可以通過這種匿名類的方式來實現
// object
public void run() { // Run method executed in thread
theApp.creatGUI(); // Call static GUI creator
}
});
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人在线视频网站| 亚洲精品国产综合久久| 伊人久久五月天| 国产精品一区二区久久久| 久久久久久久久久久av| 亚洲图片欧洲图片av| 国产亚洲激情在线| 日韩av电影在线免费播放| 色婷婷亚洲mv天堂mv在影片| 国产日本欧美一区二区三区| 日本一欧美一欧美一亚洲视频| 成人欧美一区二区三区黑人| 国产成人91久久精品| 91中文字幕在线| 亚洲高清一区二| 精品久久久久久久久久久久久久| 亚洲乱亚洲乱妇无码| 操日韩av在线电影| 亚洲午夜精品久久久久久性色| 日韩小视频在线| 国内揄拍国内精品少妇国语| 国产欧美日韩专区发布| 久久久久成人网| 日日骚av一区| 国产97色在线|日韩| 国产91在线播放九色快色| 亚洲天天在线日亚洲洲精| 久久全球大尺度高清视频| 亚洲精品久久久久久久久| 亚洲欧美变态国产另类| 亚洲欧美国产精品专区久久| 久热在线中文字幕色999舞| 91国语精品自产拍在线观看性色| 亚洲成人在线网| 日韩欧美精品网址| 久久香蕉精品香蕉| 欧美精品手机在线| 中文字幕日本精品| 国产这里只有精品| 国产精品69久久| 国产精品一区二区三区免费视频| 国产精品va在线播放我和闺蜜| 欧美黑人极品猛少妇色xxxxx| 久久久久久久久久久人体| 裸体女人亚洲精品一区| 欧美高清激情视频| 亚洲成人精品视频| 欧美日韩亚洲视频一区| 亚洲女同精品视频| 精品视频在线播放色网色视频| 久久夜色撩人精品| 国内自拍欧美激情| 亚洲第一av网站| 国产精品女人网站| 日韩免费在线观看视频| 宅男66日本亚洲欧美视频| 欧美激情xxxx| 国产欧美日韩专区发布| 久久精品精品电影网| 91精品国产综合久久香蕉最新版| 日韩中文字幕精品| 亚洲视频免费一区| 精品夜色国产国偷在线| 久久精品视频中文字幕| 成人写真福利网| 中文字幕自拍vr一区二区三区| 久久精品视频99| 国产精品爽黄69天堂a| 欧美日韩国产91| 欧美在线观看一区二区三区| 欧美精品在线观看91| 亚洲国产成人精品一区二区| 91久久久久久久| www.亚洲人.com| 91在线无精精品一区二区| 国产中文日韩欧美| 亚洲一区二区免费在线| 国产精品视频中文字幕91| 欧美精品制服第一页| 久久久久久久999精品视频| 国产精品一区二区三区在线播放| 欧美性猛交xxxx乱大交3| 国产成人久久久| 中国china体内裑精亚洲片| 亚洲欧洲av一区二区| 欧美亚洲国产日本| 亚洲精品中文字| 亚洲无亚洲人成网站77777| 久久精品视频在线播放| 亚洲日韩中文字幕| 欧美日韩一区免费| 91sao在线观看国产| 精品无人区乱码1区2区3区在线| 粗暴蹂躏中文一区二区三区| 亚洲国产女人aaa毛片在线| 欧美在线播放视频| 亚洲视频在线观看免费| 91国产精品视频在线| 中文字幕亚洲欧美一区二区三区| 欧美国产一区二区三区| 日韩黄色在线免费观看| 欧美激情xxxxx| 欧美专区第一页| 国产精品久久久久久一区二区| 中文字幕日韩欧美在线| 538国产精品视频一区二区| 久久999免费视频| 国产精品扒开腿做爽爽爽的视频| 51精品国产黑色丝袜高跟鞋| 欧美贵妇videos办公室| 亚洲精品第一页| 久久久久免费精品国产| 欲色天天网综合久久| 国产欧美一区二区三区在线看| 亚洲欧洲一区二区三区久久| 亚洲综合视频1区| 欧美高清理论片| 亚洲精品一区二区在线| 成人精品一区二区三区电影免费| 91av在线影院| 亚洲国产精品va| 国产精品扒开腿爽爽爽视频| 亚洲欧洲一区二区三区久久| 亚洲第一福利视频| 欧美视频一二三| 国产精品视频一| 日韩欧美高清视频| 国产精品69久久久久| 91日韩在线播放| 精品福利免费观看| 亚洲网站在线看| 日日噜噜噜夜夜爽亚洲精品| 亚洲欧美激情在线视频| 久久久亚洲国产天美传媒修理工| 日本成人激情视频| 国产欧美精品日韩精品| 日本国产高清不卡| 国产精品一二区| 国产香蕉精品视频一区二区三区| 精品高清一区二区三区| 色偷偷888欧美精品久久久| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲视频日韩精品| 成人黄色激情网| 日韩视频在线免费观看| 欧美中文在线观看| 欧美中文在线观看国产| 亚洲天堂一区二区三区| 亚洲高清免费观看高清完整版| 亚洲国产古装精品网站| 国产精品视频网| 色综合天天狠天天透天天伊人| 亚洲精品av在线播放| 欧美激情欧美激情在线五月| 亚洲精品美女在线| 97超级碰碰碰| 欧美日韩爱爱视频| 国产视频久久网| 81精品国产乱码久久久久久| 激情久久av一区av二区av三区| 久久亚洲精品毛片| 欧美精品福利视频| 97色伦亚洲国产| 欧美人与性动交|