【问题标题】:Java anonymous classes usageJava 匿名类的使用
【发布时间】:2013-11-06 12:26:55
【问题描述】:
package wrap;

public class Anonymous {

    public Circle getCircle(int radius){

        return new Circle(radius){
            private int rad;
            public double area() { 
                return 3.14*rad*rad;
            }
        };
    }

    public static void main(String[] args) { 
        Anonymous p = new Anonymous(); 
        Circle w = p.getCircle(10); 
        System.out.println(w.area()); 
    }
 }
    class Circle { 
        private int rad; 
        public Circle(int radius) {
            rad = radius; 
        } 
        public double area() { 
            return rad*rad; 
        }
    }

我在getcircle方法中创建了Circle的匿名内部类,但是调用getcircle方法并没有显示“我在里面”。为什么会这样??匿名类应该覆盖外部的 Circle 类。

【问题讨论】:

  • 你为什么期望它打印"I am inside"?您没有构造函数,而是匿名类中名称为 Circle 的方法。

标签: java inner-classes anonymous-class


【解决方案1】:

这个

public void Circle(int radius) {

是一个返回类型为void的方法声明,而不是构造函数。

The Java language specification states

匿名类不能有显式声明的构造函数。 相反,Java 编译器必须自动提供一个匿名的 匿名类的构造函数。

由于您从未调用上面声明的Circle(int) 方法,因此永远不会打印String "I am inside"

【讨论】:

  • 我得到 0.0 作为输出。我期待 314 作为输出
  • @Pavan 您在匿名类中声明了一个名为rad 的字段,该字段隐藏了超类Circle 中的同名字段。当您在重写的area 方法中引用它时,您指的是匿名类的字段,默认情况下初始化为0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
相关资源
最近更新 更多