匿名內部類的初始化
阿新 • • 發佈:2018-12-26
Java程式碼
- package codelib.innerclasses;
- public interface Destination {
- String readLabel();
- }
- package codelib.innerclasses;
- /**
- * @author Administrator
- *
- */
- public class InnerClassInitTest {
- public Destination destination( final String dest, final float price){
-
return
- private int cost;
- private String label = dest;
- {//例項初始化程式碼塊,相當於構造器的實際效果
- cost = Math.round(price);
- if (cost > 100)
- System.out.println("Over budget!");
- }
-
public
- return label;
- }
- };
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- InnerClassInitTest p = new InnerClassInitTest();
- Destination d = p.destination ("Tasmania",101.34F);
-
}
- }
如果匿名內部類希望使用一個在其外部定義的物件(呼叫父類構造器時,傳入的引數除外),那麼編譯器要求其引數引用是final的.
構造器是與類名同名的函式,而匿名類因為沒有名字,所以也就沒有構造器,為了達到與構造器例項化物件的效果,可以使用程式碼塊來進行例項初始化操作.如上例中的花括號中的程式碼.
匿名內部類與正規的繼承相比有些受限,因為匿名內部類既可以擴充套件類,也可以實現介面,但是不能兩者兼備.而且如果是實現介面,也只能實現一個介面.