黑马程序员技术交流社区
标题:
内部类的疑问
[打印本页]
作者:
Cola
时间:
2013-11-20 12:09
标题:
内部类的疑问
本帖最后由 Cola 于 2013-11-20 21:15 编辑
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
int x=3;
public void function()
{
new AbsDemo()
{
void show()
{
System.out.println("x= "+x);
}
}.show();
}
}
复制代码
AbsDemo是一个抽象类,Outer类的匿名内部类里写了new AbsDemo(),请问其中new AbsDemo()的写法是建立AbsDemo类的对象吗?可是抽象类不能建立实例,求解答。
作者:
zy888802
时间:
2013-11-20 12:16
new AbsDemo()
{
void show()
{
System.out.println("x= "+x);
}
}.show();
其实就是创建了AbsDemo匿名子类,然后复写了show方法,并调用
而不是创建AbsDemo的实例对象
作者:
段光宇
时间:
2013-11-20 12:36
new AbsDemo()并不是对抽象类创建对象,其实就相当于对抽象类AbsDemo()建立了子类,并对抽象类中的抽象方法show进行了重写。
作者:
Massive
时间:
2013-11-20 14:47
public void function(){...........}这一对大括号里不是要重写show方法吗? 重写完了再调用对吧? 那么如果现在他有名字,我们就可以用他子类名字创建对象然后调用,现在他没名字,我们就只能new他的父类,但这个过程其实是创建子类对象,这样的话就有了子类对象调用show方法了.(个人理解,建议回去看一下匿名内部类,那里讲的很清楚.....子类没名字所以new父类从而创建子类对象,大概就是这样)
作者:
赵许星
时间:
2013-11-20 18:41
public void function()
{
final int x=3;
new AbsDemo()
{
void show()
{
System.out.println("x= "+x);
}
}.show();
}
这是定义并重写匿名类的书写方式,记住就行,定义了AbsDemo的重写后的子类并调用show()方法。
楼主,感觉你的代码中有一个bug。
final int x=3;才可以被局部内部类访问。
作者:
Cola
时间:
2013-11-20 21:14
赵许星 发表于 2013-11-20 18:41
public void function()
{
final int x=3;
x是Outer类的成员变量时,内部类可以调用的。局部变量确实得用final修饰。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2