关于java中匿名内部类的问题

不是说抽象类不能实例化么?为啥这里它又实例化了??
疑惑是代码中有个 person p=new person()

图片说明

5个回答

定义匿名内部类的格式:
new 父类构造器(参数列表)|实现接口()

{

//匿名内部类的类体部分

}

相当于
new Person(){
//类体部分
}

也相当于如下代码,但是不等于,匿名内部类没有类名,无法定义构造器,但可以定义实例初始化块,通过实例初始化块来完成构造器需要完成的事情
class 子类 extends Person {
//实现父类抽象方法
}
而Person p 是声明一个引用变量,用于指向内部类,不是实例化;因为匿名内部类适合创建只需要使用一次的类,所以不需要新建一个子类继承父类。
(仅是小白的见解,有错见谅)

xiaobailian1
小白One 回复明立: 是这样啊,怪不得我看着有些别扭,小白谢谢了
大约 3 年之前 回复
dengminghli
明立 Person p不是指向关系,而是将子类向上转型为父类
大约 3 年之前 回复

new Person()这里是一个匿名的类,这个类实现了抽象方法,所以这个匿名类是Person的子类,从而父类引用指向子类对象。
这里就存在了多态。
个人理解,有错望指正!

这不是在创建对象的时候重写了方法么

sinat_25136209
sinat_bond 我就是看的这个博客才提问的。。
大约 3 年之前 回复

定义匿名内部类的方法是new 父类构造方法{
//重写父类中的方法
}
你这个其实就是创建了一个新的匿名类去继承了Person类,然后将匿名类对象向上转型为Person类。
Person p =new Person(); 是不一样的,要注意区分一下,可以看通过有没有实现父类的抽象方法来判定,因为一般的类在平时是不会这样去重写父类的方法

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问