自学java 第十章内部类(二)
今天主要學(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20145328 《Java程序设计》第
- 下一篇: iOS 开发中的各种证书