黑马程序员技术交流社区
标题:
求解代码:匿名内部类的调用问题,可以调用成员变量吗?
[打印本页]
作者:
依然精彩
时间:
2014-5-3 11:08
标题:
求解代码:匿名内部类的调用问题,可以调用成员变量吗?
本帖最后由 依然精彩 于 2014-5-3 16:26 编辑
匿名内部类: 为什么调用.num不对?
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
int x = 4;
public void function()
{
//new Inner().show();
new AbsDemo()//AbsDemo的子类对象
{ //这个大括号是类的,里面是成员变量/函数。
int num = 9;
void show()
{
System.out.println("num="+num);
}
void run()
{
System.out.println("run");
}
}.num; //.show();
} //为什么调用.num不对?
}
class InnerClassNiMing
{
public static void main(String[] args)
{
new Outer().function();
}
}
复制代码
错误原因:.java:47: 不是语句
}.num;
^
作者:
依然精彩
时间:
2014-5-3 11:10
是与静态修饰有关吗?我现在有点儿乱。:'(:'(:'(
作者:
skill20
时间:
2014-5-3 12:04
匿名内部类:没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用这种形式。匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类或者实现接口。
匿名内部类的格式:new 父类名&接口名(){ 定义子类成员或者覆盖父类方法 }.方法。
//1
new Object(){
void show(){
System.out.println("show run");
}
}.show();
//2
Object obj = new Object(){
void show(){
System.out.println("show run");
}
};
obj.show();
复制代码
1和2的写法正确吗?有区别吗?说出原因。
写法是正确,1和2都是在通过匿名内部类建立一个Object类的子类对象。
区别:
第一个可是编译通过,并运行。
第二个编译失败,因为匿名内部类是一个子类对象,当用Object的obj引用指向时,就被提升为了
Object类型,而编译时检查Object类中是否有show方法,所以编译失败。
作者:
optimisticpig
时间:
2014-5-3 12:11
new AbsDemo()//AbsDemo的子类对象
{
int num = 9;
void show()
{
System.out.println("num="+num);
}
void run()
{
System.out.println("run");
}
}.num;
复制代码
匿名内部类相当于父类引用指向子类对象。
编译失败应该是父类中没有num变量
作者:
wconho
时间:
2014-5-3 13:28
new AbsDemo()//AbsDemo的子类对象
{//这个大括号是类的,里面是成员变量/函数。
int num = 9;
void show()
{
System.out.println("num="+num);
}
void run()
{
System.out.println("run");
}
}.num;//你在这里,内部类调用成员变量是具体要做什么,是要设置其值:内部类对象.num = 12;还是要打印该值:system.out.println(内部类对象.num);需要具体指出来,否则编译失败,这是原因。
这句号就相当于 :
class A{
int num = 3;
}
class B{
public static void main(String[] args){
new A().num;//这句话是不对的。
new A().num = 10;//这句对,你需要指出你到底使用该变量要做什么。
}
}
作者:
邵景伦
时间:
2014-5-3 15:36
new Object(){
void show(){
System.out.println("show run");
}
}.show();/*匿名内部类是一个子类对象,当用Object的obj引用指向内部类时,就被提升为了
Object类型,而编译时检查Object类中是否有show方法,所以编译失败。Objiect类型访问子类方法需要强转*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2