黑马程序员技术交流社区
标题:
匿名内部类
[打印本页]
作者:
18353666072
时间:
2014-6-8 12:58
标题:
匿名内部类
interface Inter
{
public void method();
}
class Test
{
static Inter function()
{
return new Inter()
{
public void method()
{
System.out.println("oK");
}
};
}
}
class Test2
{
static class Inner implements Inter
{
public void method()
{
System.out.println("ok !!!");
}
}
static Inter function()
{
return new Inner();
}
}
class neibulei
{
public static void main(String[] a){
Test2.function().method();
}
}
复制代码
Test2.function().method(); 这句话我咋看不懂呢,,,,,,,,,,,,,,,,,,,请大神解释解释{:3_62:}
还有为什么匿名内部类要么实现接口,要么继承呢,,,,,,,,,,,,,,,,,,也请大神解释解释{:3_62:}
谢谢------:handshake:(
作者:
执笔梦
时间:
2014-6-8 13:14
本帖最后由 执笔梦 于 2014-6-8 13:17 编辑
Test2.function().method();
如:
Inter inner = Test2.function();
inner.method();
.Test2.function();属于类名直接调用静态方法,而这个方法返一个实现接口的内部类对象,
再用这个对象调用属于它的方法method();
作者:
123_yaya
时间:
2014-6-8 13:15
Test2.function().method()相当于
Inter inter=Test2.function();
inter.method();
复制代码
楼主的第二个问题,我理解的是,不是因为要写一个匿名内部类所以要实现接口或者继承。就像你的例子一样,一般你要返回一个实现了某个接口的对象时,为了简写该方法才用到了匿名内部类。
作者:
shisishishisi
时间:
2014-6-8 13:25
Test2.function().method();分析:
首先:Test2.function()即通过类名Test2直接调用function()方法,说明该方法为静态,
其次:Test2.function().method();调用完function()方法后能再调用method()方法,说明该方法返回一个对象
又因为method()是内部类中的一个方法,对内部类成员的访问需要建立内部类的对象,所以function()返回的是内部类Inner的实例对象
匿名内部类要么实现接口要么继承的原因:
因为内部类没有名字,所以要创建该类只能使用多态:父类引用指向子类对象
所以: new 父类或者接口(){定义子类的内容}
对于实现的接口需要对接口里的方法进行实现
对于继承的父类,因为是父类引用指向子类实例对象,所以不能调用子类的特有方法
如有缺漏,还请大家指教~~!
作者:
790324255a
时间:
2014-6-8 13:37
Test2.function()方法返回的是一个Inter接口对象 相当于多态 new Inter=new Test2.Inner() 因为接口不能实例所以不能直接调用接口的抽象方法(就算能调用也意义) 得有个类去实现该接口并去重写抽象方法 Test2中的内部类Inner实现了Inter接口 并重写了Method方法 .method()相当于调用内部类new Test2.Inner().method() 所以就调用的是实现类的方法结果 第二个问题不知怎么说
作者:
wangkerui
时间:
2014-6-8 13:53
表示同问,很久没接触内部类了,都忘了啊!
作者:
西门吹风
时间:
2014-6-8 17:18
本帖最后由 西门吹风 于 2014-6-8 17:23 编辑
Test2.fnuction():返回一个内部类实例对象
Test2.function().method():这个内部类实例对象调内部类中的method方法
第二个问题,想想如果一个匿名内部类既没有继承类,也没有实现接口,而且还没有名字,那么要怎样创建它的实例对象呢?好像不行吧,如果继承一个类或实现一个接口,即使这个匿名类没有名字,也可以利用多态的特性,通父类或接口的引用来创建子类实例对象。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2