匿名内部类中给基类构造器传参问题,求大佬解答。

问月晚安 2018-11-05 09:55:06
在这里面我知道匿名内部类重写了Warpping的方法,它们之间拥有着父子级关系,不然不可能通过匿名内部类传参给Warpping的有参构造器也不可能可以调用super.value方法。但是我搞不懂的就是这里并没有明显的父子级声明,为什么这里是一种父子级关系呢?求大神解惑!

interface Contents{
int value();
}
class Warpping implements Contents{
private int i;
public Warpping(int x) {
i=x;
}
public int value() {
return i;
}
}

public class Testone{
public Warpping warpping (int x) {
return new Warpping(x) {
public int value() {
return super.value() * 4;
}
};
}

public static void main(String[] args) {
int i = new Testone().warpping(5).value();
System.out.println(i);
}

}

//Output: 20
...全文
56 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2018-11-09
  • 打赏
  • 举报
回复
匿名类的写法都没有显式的父子继承关系,只是在new的时候重载父类方法 如常见的 new Runnable() { public void run() {} }; new Comparator<XXX>() { public int compare(XXX a, XXX b) {return 1;} }; 如果非要显式的父子继承关系,那就如1楼所说,此时就不属于匿名类了
sotondolphin 2018-11-08
  • 打赏
  • 举报
回复
可以这样理解

public class Testone{
public Warpping warpping (int x) {

class TempWrap extends Wrapping{
public int value() {
return super.value() * 4;
}
}

return new TempWrap();
}
qq_39936465 2018-11-06
  • 打赏
  • 举报
回复
抽象类和接口不可以直接实例化,如果需要实例化的话,需要通过子类继承后,在子类中重写父类的抽象方法的实现方法。

然后共同实例化子类来使用,而通过匿名内部类可以不用直接写子类,而把重写的抽象方法直接写在匿名内部类中。这是2种

实现抽象类的方式,所以匿名内部类和子类很相似的。但是匿名内部类只能使用一次,再次使用需要重新再编写一次,而子类

实例化后可以通过变量名,反复调用。



62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧