当前位置:编程学习 > JAVA >>

匿名内部类问题

这是用记事本写的匿名内部类程序(java编程思想P197例子),用的java1.7编译器,无法编译[img=http://user.qzone.qq.com/1476505546/infocenter#!app=4&via=QZ.HashRefresh][/img]

public class Parcel{
public Contents contents(){
return new Contents(){
private int i=11;
public int value(){ return i;}
};
}
public static void main(String args[]){
Parcel p=new Parcel();
Contents c=p.contents();
}
}
--------------------编程问答-------------------- 可能是你的代码不完整!其中的一部分,很多书也有缺点 --------------------编程问答-------------------- 什么是匿名内部类?


适合哪种只需要使用一次的类。例如:


package com.snow.test;

class P {
void add(P p) {
System.out.println("abc");
}
}
public class C extends P{
public static void main(String[] args) {
C c = new C();
c.add(new P(){

});//所选部分即为匿名内部类。它是没有名字的
}
}


--------------------编程问答-------------------- public class Parcel{
    public Contents contents(){
        return new Contents(){
            private int i=11;
            public int value(){    return i;}
        };
    }
    class Contents{
    
    }
    public static void main(String args[]){
        Parcel p=new Parcel();
        Contents c=p.contents();
    }
}
这样就可以啦 。return new Contents(){
            private int i=11;
            public int value(){    return i;}
        };
这里相当于class Contents的子类吧。 父类引用指向子类对象吧。这个理解,不知道对不对 --------------------编程问答-------------------- 这里面没有继承,只是个内部类而已 --------------------编程问答--------------------
引用 2 楼  的回复:
什么是匿名内部类?


适合哪种只需要使用一次的类。例如:

Java code

package com.snow.test;

class P {
    void add(P p) {
        System.out.println("abc");
    }
}
public class C extends P{
    public static void main(……

我程序里的Contents类和你的P类是一样的吧 --------------------编程问答--------------------
引用 3 楼  的回复:
public class Parcel{
    public Contents contents(){
        return new Contents(){
            private int i=11;
            public int value(){    return i;}
        };
    }
    class Conte……

匿名内部类好像不是这样定义的 --------------------编程问答-------------------- 我想我明白了,“一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类”。在外部类前面先定义Contents为抽象类能运行了。谢谢大家了 --------------------编程问答--------------------
引用 7 楼  的回复:
我想我明白了,“一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类”。在外部类前面先定义Contents为抽象类能运行了。谢谢大家了

差不多是这样的,你的Contents 也可以换个一个接口,都是可以的,但是前提是要先定义。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,