为什么抽象类可以实例化

一只新猴子 2018-10-26 09:09:20
asbtract Person { public abstractvoid eat (); } public class Demo { public static void main(String[] args){ Person p = new Person (){ public void eat (){ system.out .println(“hello”) } } } }
...全文
1965 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
TJkaklf 2018-11-21
  • 打赏
  • 举报
回复
匿名内部类等同于子类,抽象方法被覆写后,确实可以实例化。
zhjl1989 2018-11-21
  • 打赏
  • 举报
回复 1
此种写法叫做 匿名内部类 相当于你new 了person的子类 这个子类 在new Person (){ public void eat (){ System.out.println("hello"); } }; 实现了父类的方法
  • 打赏
  • 举报
回复
这是一个匿名类啊
妈呀! 2018-11-20
  • 打赏
  • 举报
回复
抽象类是不能实例化的 楼主所说的是匿名内部类 在以前swing开发中就会经常出现
比如 你要使用这个抽象类的方法 就得去实现这个抽象类 来重写方法 假如你只想使用一次的话 就可以采取匿名内部类
这种方式 在当前类中重写 以上是个人理解
legendaryhaha 2018-11-19
  • 打赏
  • 举报
回复
引用 51 楼 legendaryhaha的回复:
[quote=引用 2 楼 千秋无痕的回复:]对java来说,类是可以实例化的,不管你是子类,父类,还是抽象类;

就如同1+1=2,你问为什么等于2,这个真的不容易有答案?
抽象类不可以实例化。。。它这里用的是匿名类的[/quote] 应该说,不能直接实例化比较严谨
legendaryhaha 2018-11-19
  • 打赏
  • 举报
回复
引用 2 楼 千秋无痕的回复:
对java来说,类是可以实例化的,不管你是子类,父类,还是抽象类;

就如同1+1=2,你问为什么等于2,这个真的不容易有答案?
抽象类不可以实例化。。。它这里用的是匿名类的
紫色动力 2018-11-18
  • 打赏
  • 举报
回复
这个不是抽象类的实例化。
秦夏耘 2018-11-15
  • 打赏
  • 举报
回复
内部匿名类的方式可以实例化
bryant20062006 2018-11-14
  • 打赏
  • 举报
回复
引用 8 楼 stacksoverflow的回复:
[quote=引用 6 楼 qq_39936465 的回复:] 你确定楼主的代码可以编译?不能编译说什么都是白搭,反正我是怎么改都不能通过编译的。
楼主只是拼错了几个单词,写错了一些大小写,和全角半角双引号,少了一个分号。 改成下面就可以了,用接口或抽象类new一个匿名类语法上没什么好说的,自己查查资料。

abstract class Person {
   public abstract void  eat ();
}

public class Demo {
   public static void main(String[] args){
      Person p = new Person (){
        public  void eat (){
          System.out.println("hello");
        }
      };
      
      p.eat();
 }
}

[/quote] 正解,匿名内部类语法问题
_jant 2018-11-08
  • 打赏
  • 举报
回复
抽象类可以实例化个几把,你给我实例化下抽象本身这个类试试。 2L 说的什么几把, 楼主这个从代码上看像是抽象类本身被实例化了,其实反编译看 并不是抽象类本身直接被实例化,是产生了一个匿名类,实现了抽象类的方法
nyq1999 2018-11-07
  • 打赏
  • 举报
回复
你实际看编译后的class。。
星空是梦想 2018-11-06
  • 打赏
  • 举报
回复
虽然Person是抽象类,但是你在Demo中重写类Person的eat()方法,相当于继承了Person类。 下面是我测试的代码,楼主有一些语法错误也改回来了哈哈哈。 Person类: 测试主类:
暴走的小开 2018-11-05
  • 打赏
  • 举报
回复
引用 2 楼 千秋无痕的回复:
对java来说,类是可以实例化的,不管你是子类,父类,还是抽象类;

就如同1+1=2,你问为什么等于2,这个真的不容易有答案?
不懂别误人子弟,抽象类可以实例化自己?
逸剑听潮 2018-11-01
  • 打赏
  • 举报
回复
大侠们回答的都很专业版啊,c#中的确规定接口了雏牧香累
  • 打赏
  • 举报
回复
实例化的是一个匿名内部类,是person的一个子类,重写了抽象方法,所以可以创建对象
桔塵心 2018-10-31
  • 打赏
  • 举报
回复
匿名类重写person的eat方法,涨知识了。。。 package test; public abstract class Person { public abstract void eat(); } package test; public class Demo { public static void main(String[] args) { Person p = new Person(){ public void eat() { System.out.print("hello"); } }; p.eat(); } }
哲野大可爱 2018-10-31
  • 打赏
  • 举报
回复
暗戳戳收藏了 作为一个菜到挂科并且从不主动去问别人自己问题的人 楼主简直是我的恩人 其实不是不想去问 而是觉得一 可能不会被理睬 二是对方如果是老师可能会说一堆东西绕晕或者说的太简单 如果是学生 本来他就是学生 正在学习中 理解的可能也不是太深 问了也会一知半解 还是蟹蟹楼主啦
yoyocomeonbabygo 2018-10-30
  • 打赏
  • 举报
回复
多态了解一下
an煮鸡蛋 2018-10-30
  • 打赏
  • 举报
回复
本来抽象类中只写抽象方法,是不能实例化的,但是,你用了匿名内部类实现了抽象方法,就可以实例化了啊
北漂的菜小白 2018-10-30
  • 打赏
  • 举报
回复
抽象类是不能实例化的,实例化是在栈内存和堆内存中划分一定的空间,而抽象的类或者接口在编译器编译的时候就直接pass了,所以不能实例化,JDK1.8以后的接口可以有static的方法,但是我知道怎么用
加载更多回复(34)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧