黑马程序员技术交流社区
标题:
今天复习匿名内部类遇到的问题,很奇怪?有劳给解?
[打印本页]
作者:
李成航
时间:
2012-3-13 17:48
标题:
今天复习匿名内部类遇到的问题,很奇怪?有劳给解?
class A {
public void tes(){}
}
class Test{
public static void main(String[] args){
A b=new A(){public void tes2(){}
};
b.tes();//成功编译
b.tes2();//编译失败!!??
为什么匿名内部类对象只能调用它父类定义了的tes()方法,而不能调用自己定义的tes2()方法??
}
}
作者:
段浩亮
时间:
2012-3-13 18:07
你这是多态调用 只能调用父类中也有的方法 如果想用子类特有方法 要进行类型转换
作者:
未济64
时间:
2012-3-13 18:09
匿名内部类实现了某个接口或者继承了某个存在类的子类。如果一个类只使用一次,那么可以定义为匿名内部类。
建立匿名内部类的关键点是重写父类的一个或多个方法。再强调一下,是重写父类的方法,而不是创建新的方法。
因为用父类的引用不可能调用父类本身没有的方法!创建新的方法是多余的!!!
参考了其他同学的答案
作者:
蒙武辉
时间:
2012-3-13 18:54
首先你要理解匿名内部类的定义前提:
内部类必须是继承一个类或者实现接口。
我的理解是应该不允许调用自己自定义的方法。
作者:
贠(yun)靖
时间:
2012-3-13 19:04
这设计到了继承多肽的 向上和向下转型的问题了
你A 引用是父类的引用 指向之类对象 这时的引用相当于是父类型的
所以只能调用父类中的方法 而如果要调用之类的方法
就必须向下转型 强制转换了 子类名 xxx=(子类名)父类引用 转型后就可以调用子类中特有的方法了
作者:
房宝彬
时间:
2012-3-13 20:09
补充LS一点:在多态的情况下,如果子类复写了父类的方法,那么在执行时是使用子类的方法
作者:
王杰
时间:
2012-3-13 20:31
多态问题,遇到这样的问题你必须将b向下转型为子类才可以调用!
作者:
泮和顺
时间:
2012-3-13 21:05
你这个不叫匿名内部类哦,匿名内部类是继承父类所以去new一下然后复写里面的方法 毕老师视频有特别讲,
如果你这个也算,也不是不能这么写的,只能复写方法吧
作者:
袁野
时间:
2012-3-13 22:16
哥们 多态啊 编译方法时候看左边 运行看右边 向下转型 才能使用子类方法
作者:
djx900
时间:
2012-3-13 22:24
A b=new A(){public void tes2(){}
只要A是父类 匿名内部类 老毕格式 没错 就对了 大括号里是 所谓的 覆盖 于被覆盖的方法。
作者:
乔玉吉
时间:
2012-3-13 22:54
如果内部类只使用一次,在定义内部类的时候为了简化书写,
我们可以定义匿名内部类,匿名就是没有内部类名字
前提:内部类必须继承或实现一个类或接口.被继承的那个类或接口我们称之为父类
格式: new 父类名或接口{定义子类的内容} //当看到new的时候就要想到new一个对象,而且是一个内部类对象,只是没有内部类名字,故而叫匿名内部类
注意:大括号内是子类的内容,可以覆盖或实现父类中的方法,
父类只能访问自己的方法或者被子类覆盖后的方法.不能访问子类中特有的方法.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2