怎么理解匿名内部类

怎么理解匿名内部类

test.getRead(new Person() {


@Override

public void read() {

// TODO Auto-generated method stub

System.out.println("男生喜欢看科幻类书籍");

}

});

老师,1、test.getRead();参数括号里的new Person()指的是new一个Person类的实例对象吗?可是Person类是抽象类,怎么能new Person()呢?

2、new Person()后面跟的大括号里去重写Person类的抽象方法read,这怎么理解?

3、getRead方法传的是Person类的对象引用,可是传的是new Person(){},括号里还是重写的代码,这样操作行吗?

4、怎么去理解匿名内部类呢,感觉不能理解。

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
吃吃吃鱼的猫 2019-06-07 15:06:57

很抱歉,这里说错了。是抽象类,这里是指Person类。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

吃吃吃鱼的猫 2019-06-07 10:02:19

同学你好,同学的理解是正确的。

我们先来看一下它的名字:匿名类。

顾名思义:new Person()以及其中的内容,被认为是实现了Person接口的类去掉类声明后的类体,称作匿名类。

同学可以将它理解为没有具体声明名字,但是实现了Person的一个类体。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    老师,Person类是父类,跟接口和实现类有什么关系,你的回答是:new Person()以及其中的内容,被认为是实现了Person接口的类去掉类声明后的类体,称作匿名类。同学可以将它理解为没有具体声明名字,但是实现了Person的一个类体。----------》老师,匿名类和接口有关系吗?
    2019-06-07 14:30:28
吃吃吃鱼的猫 2019-06-06 17:55:28

同学你好,这样设计有其目的,在实际开发中并不常用,同学不必纠结这个,记住即可。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 鱼儿0001 #1
    那么这个new Person(),是不是在子类实例化对象?
    2019-06-06 21:16:24
好帮手慕珊 2019-06-03 15:50:57

你好!分别解答你的几个问题:

第一个问题,new Person()不是创建一个Person的对象,是创建一个Person的子类的对象,但是该子类是没有显式声明名字的,所以叫做匿名内部类

第二个问题,我们在第一个问题说了,虽然没有显式声明子类,但该类是存在的,只是没有名字,所以这里要实现类中的方法。这个可以当做语法格式去记忆。

第三个问题,这个操作是可行的,否则代码就会报错了

第四个问题,匿名内部类这种形式,是为了方便使用,如果这个类只有在此处使用,其他地方都用不到,那么定义匿名内部类就可以了。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 鱼儿0001 #1
    谢谢老师的回复,老师,我看了你的回答后,有点问题。你说new Person()不是创建一个Person的对象,是创建一个Person的子类对象。可是new Person();这怎么看都是new的Person类的对象啊,就像从前的那种对象实例化:Person one=new Person();,这跟创建子类的对象没关系啊,感觉这里不好理解
    2019-06-04 10:25:26
  • 好帮手慕小班 回复 提问者 鱼儿0001 #2
    同学你好,1、这里Person是一个抽象类,抽象类无法直接实例化,而是通过父类的应用来指向子类的实例间接地实现父类的实例化,这样创建了继承抽象类的子类对象就把Person类实例化啦! 这里new Person()的写法是不对的哦! 2、所以这里通过匿名内部类创建的是继承抽象父类Person的子类对象哦! 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-06-04 16:45:17
  • 提问者 鱼儿0001 回复 好帮手慕小班 #3
    谢谢老师的耐心回复,但是感觉你没回答到点子上。我知道匿名内部类是在创建一个子类实例对象,但是这里写的是new Person(){}这样的形式。老师new Person可是创建Person类的对象啊,是在创建抽象父类的实例对象,子类的创建实例对象过程没体现出来啊
    2019-06-05 17:15:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师