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 new Destination() {
private int cost;
private String label = dest;
{//实例初始化代码块,相当于构造器的实际效果
cost = Math.round(price);
if (cost > 100)
System.out.println("Over budget!");
}
public String readLabel() {
return label;
}
};
}
/**
* @param args
*/
public static void main(String[] args) {
InnerClassInitTest p = new InnerClassInitTest();
Destination d = p.destination ("Tasmania",101.34F);
}
}
如果匿名内部类希望使用一个在其外部定义的对象(调用父类构造器时,传入的参数除外),那么编译器要求其参数引用是final的.
构造器是与类名同名的函数,而匿名类因为没有名字,所以也就没有构造器,为了达到与构造器实例化对象的效果,可以使用代码块来进行实例初始化操作.如上例中的花括号中的代码.
匿名内部类与正规的继承相比有些受限,因为匿名内部类既可以扩展类,也可以实现接口,但是不能两者兼备.而且如果是实现接口,也只能实现一个接口.
分享到:
相关推荐
它可以直接继承一个类或实现一个接口,并且可以在声明的同时初始化。 1. **创建匿名内部类** - **作为局部变量**:在方法或代码块内声明,可以用来实现接口或者继承类。 ```java Button button = new Button() {...
- 匿名内部类不能有构造器,但可以通过初始化块来传递参数。 学习“Java4Android 35_内部类和匿名内部类”这个教程,开发者将掌握如何有效地利用内部类和匿名内部类,提升代码的结构和功能,特别是在Android应用...
8. **匿名内部类初始化**:在Java中,可以创建没有名字的内部类,它们通常用在需要一次性创建的场合,如事件处理器。初始化匿名内部类时,需要立即创建其实例。 9. **集合初始化**:Java提供了ArrayList, ...
这种特性使得匿名内部类在某些特定情况下,比如初始化集合框架如Set、Map、List时,能提供更加简洁的代码。本文将深入探讨如何在Java中利用匿名内部类进行双括弧初始化的方法。 首先,让我们理解什么是匿名内部类。...
7. **构造器调用**:当内部类被继承时,由于内部类拥有对外部类的引用,所以在子类的构造器中必须显式调用`super()`来初始化这个引用。在代码示例中,`AnoClass`继承了`Outer.Inner`,并通过`wi.super();`调用了外部...
匿名内部类可以在定义时直接初始化,省略了类的定义部分。 示例代码如下: ```java public class AnonymousInnerClass { public static void main(String[] args) { Runnable runnable = new Runnable() { @...
在匿名内部类中定义成员变量时,可以在声明时进行初始化,就像在常规类中一样。例如: ```java public class Parcel8 { public Destination dest(final String dest) { return new Destination() { private ...
在Java编程语言中,匿名内部类是一种特殊的类,它没有名称,通常用于简洁地实现某个接口或继承某个类,尤其在只需要单个实例且无需多次复用的情况下。这种设计模式可以大大简化代码,提高可读性。下面我们将深入探讨...
### Java特别篇-匿名对象与匿名内部类 #### 一、匿名对象 在Java中,对象通常通过定义一个变量来引用。例如,在`Student`类的例子中,我们首先定义了一个`Student`类,并且在`Test`类的`main`方法中通过以下方式...
匿名内部类可以直接在类、方法或初始化块中定义,不需要单独的文件。创建匿名内部类时,我们只需在其后跟一个对象实例化,如 `new InterfaceName() { /* 实现接口的方法 */ }` 或 `new SuperClassName() { /* 重写...
Java编程语言中的匿名内部类是Java面向对象特性的一个重要组成部分,它允许我们在不定义一个完整的新类的情况下,创建类的实例。在徐培成老师的"Java基础第06天-04.匿名内部类1"课程中,我们将深入探讨这个主题。 ...
2. 非静态内部类不能声明静态初始化块和静态成员,除非它们是常量。 3. 如果内部类是在方法内定义的,它不能访问该方法的局部变量和参数,除非这些变量被声明为final。 匿名类是无名的类,通常用于快速创建一个只...
局部内部类和匿名内部类是Java中的一种特性,它们允许我们在方法内部定义类。然而,一个重要的限制是,这些内部类只能访问在其作用域内的final或者实际上等效于final的局部变量。这是因为内部类可能在外部方法结束后...
System.out.println("匿名内部类的初始化块..."); } // 实现抽象方法 public double getPrice() { return 56.2; } }; ai.test(d); } } ``` 在上面的代码中,我们使用匿名内部类来创建了某个Device对象,并...
在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类、匿名内部类使用的形参为何要为final。 一、使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有...
利用匿名内部类可以一次性初始化List,这种方式在代码中看起来比较简洁。 ```java List<String> names = new ArrayList() {{ add("Tom"); add("Sally"); add("John"); }}; System.out.println(names); ``` 5. ...
3. **本地内部类(Local Inner Classes)**:这些内部类是在方法体或初始化块中定义的。它们可以访问该方法中的局部变量,但这些变量必须是final的。本地内部类的作用域仅限于定义它的方法或块。 4. **匿名内部类...
4. `l4` 展示了可以在匿名内部类中包含多个初始化块,这在某些场景下可能会有用。 5. `l5` 创建了一个匿名内部类,它在调用父类的构造函数(这里传入了参数5)后执行自己的初始化块。这表明匿名内部类虽然没有显式的...
- 局部内部类是在方法、构造器或初始化块内部定义的类。它们的作用域仅限于该方法或代码块,因此具有更高的封装性。 3. **匿名内部类**: - 匿名内部类没有名称,通常用于快速创建一次性使用的简单类,常用于实现...