日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自学java 第十章内部类(二)

發(fā)布時間:2025/3/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自学java 第十章内部类(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天主要學(xué)習(xí)了匿名內(nèi)部類。

匿名內(nèi)部類是一種特殊的內(nèi)部類,它沒有類名,是通過繼承一個類或?qū)崿F(xiàn)一個接口來創(chuàng)建的,匿名內(nèi)部類相當(dāng)于基類的一個導(dǎo)出類,不過它只能通過向上轉(zhuǎn)型為基類類型后才能被使用。

匿名內(nèi)部類主要用于對繼承方法進(jìn)行實現(xiàn)或覆蓋,它不需要添加其它的方法,即使添加也無法使用(因為它沒有類名,只能通過向上轉(zhuǎn)型使用,且無法向下轉(zhuǎn)型,因此添加的其它方法也就無法訪問)。

匿名內(nèi)部類如果想使用外部定義的對象,則編譯器要求參數(shù)引用必須是final類型,否則會報錯。如:

public Destination destination(final String s){

    return new Destination(){

      private String item=s;

  }

};

匿名內(nèi)部類可以通過實例初始化來達(dá)到為匿名內(nèi)部類創(chuàng)建一個構(gòu)造器的效果。如:

DangerousMonster getMonster(){
return new DangerousMonster(){
{System.out.println("this is Inside instance initializer");}
@Override
public void menace() {
System.out.println("this is DangerousMonster.menace()");
}
@Override
public void destroy() {
System.out.println("this is DangerousMonster.destroy()");
}
};

使用匿名內(nèi)部類來設(shè)計工廠方法會達(dá)到更好的效果:

package chapter_ten;

import java.util.Random;

public class Demo_seventeen {
static void playGame(GameFactory f){
Game g=f.getGame();
g.play();
}
public static void main(String[] args) {
playGame(ThrowCoin.factory);
playGame(ThrowDice.factory);
}

}

interface Game{
void play();
}

interface GameFactory{
Game getGame();
}

class ThrowCoin implements Game{ //拋硬幣

private Random rand=new Random();
public void play() {
if(rand.nextInt(2)==1)
System.out.println("您此次拋的是正面");
else
System.out.println("您此次拋的是反面");
}
public static GameFactory factory=new GameFactory(){

@Override
public Game getGame(){
return new ThrowCoin();
}
};
}

class ThrowDice implements Game{ //擲骰子
private Random rand=new Random();
public void play(){
switch(rand.nextInt(6)+1){
case 1:
System.out.println("您擲的是1");
break;
case 2:
System.out.println("您擲的是2");
break;
case 3:
System.out.println("您擲的是3");
break;
case 4:
System.out.println("您擲的是4");
break;
case 5:
System.out.println("您擲的是5");
break;
case 6:
System.out.println("您擲的是6");
break;
}
}
public static GameFactory factory=new GameFactory(){
@Override
public Game getGame(){
return new ThrowDice();
}
};
}

轉(zhuǎn)載于:https://www.cnblogs.com/grj0011/p/4845351.html

總結(jié)

以上是生活随笔為你收集整理的自学java 第十章内部类(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。