黑马程序员技术交流社区
标题:
匿名内部类编译出错,求解!
[打印本页]
作者:
范晓冲
时间:
2014-1-10 15:53
标题:
匿名内部类编译出错,求解!
/*
匿名内部类:
1、理解:匿名内部类就是内部类的一种简化形式。
2、前提:匿名内部类得继承一个类,或者实现一个接口。
*/
abstract class Hart{
public abstract void show();
}
class Body{
int x=8888;
/*
class InnerHart extends Hart{
public void show(){
System.out.println("x=="+x);
}
}
public void function(){
new InnerHart().show();
}
*/
//如下代码是上面注释部分的等价代码,可以用匿名内部类代替,但是编译出错,老毕就是这么写的啊!
//难道我写的匿名内部类格式有问题?还是局部细节有待改正?请指点,不胜感激。
//匿名内部类好难理解啊
new Hart(){
public void show(){
System.out.println("x=="+x);
}
}.show();
}
public class NiMingInnerClass090402{
public static void main(String[] args){
}
}
复制代码
编译结果:
NiMingInnerClass.png
(85.21 KB, 下载次数: 46)
下载附件
2014-1-10 15:53 上传
作者:
黄晓鑫
时间:
2014-1-10 16:24
你这个好像是匿名对象不是匿名内部类 你的匿名内部类在哪里? 类是class修饰的
作者:
黄晓鑫
时间:
2014-1-10 16:25
你搞个匿名内部类继承抽象类 然后写这个匿名对象 就OK了
作者:
猎鹰tianya
时间:
2014-1-10 16:53
LZ的代码我看了半天,实在没看出问题,于是,我把你写的注释什么的,多余的都删掉,结构清晰了!
LZ写的是匿名内部类,但写到类里面了。
我们知道,类里面可以写两种东西,
一个属性,一个方法
。
很显然,匿名内部类不是方法,那是不是属性呢?由于匿名内部类返回一个对象,所以不是也不是属性(真没见过返回对象的属性呢{:soso_e120:})。
所以结论是:
这玩意不是类的成员,却呆在类里面,所以编译器不同意通过嘛!
你写到函数里面就好了,比如下面这样:
public static void main(String[] args) {
final int x = 888;
new Hart() {
public void show() {
System.out.println("x==" + x);
}
}.show();
}
复制代码
作者:
天天学习
时间:
2014-1-10 16:53
1,代码块存放位置放错了,它是一个内部类对象掉用方法,不能独立存在一个类中,它不是类成员,类内部存放的是方法和成员变量,因此应将其放入Body类的 function方法内,而不能独立存在于Body类中。
2,代码修改
abstract class Hart{
public abstract void show();
}
class Body{
int x=8888;
public void function(){
new Hart(){
public void show(){
System.out.println("x=="+x);
}
}.show();
}
}
public class InnerClassTest{
public static void main(String[] args){
Body body = new Body();
body.function();
}
}
复制代码
作者:
范晓冲
时间:
2014-1-10 21:05
谢谢版主,我在努力,我要感动我自己,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2