栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

“为什么抽象类不能被实例化?”

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“为什么抽象类不能被实例化?”

  之前上课老师有问到过:“为什么抽象类不能被实例化?”

  我也看了很多大佬们的帖子,都写得很好很棒!但是有一些说法我个人可能觉得有点问题:
  比如:第一个观点:"   什么是抽象类?
                                     抽象:就是不具体的意思。
                                     类是对对象的具体描述,而抽象类不具体,没有方法体,(提供的成员不足以生成一个具体对象),那么就无法生成一个不具体的对象。就好比,你可以实例化一个苹果,但你不能实例化一个水果(这个现实中存在的实物)。"
            第二个观点:"    在java中任何类和接口都可以定义静态变量,抽象类和普通类的区别在于,抽象类没有构造方法并且系统也不会自动生成它的构造方法,所以它不能实例化"。
            这里的解释和例子都没有毛病!但是第一个观点说”提供的成员不足以生成一个具体对象“,生成一个对象我的理解:“不就是通过关键字new来实现的吗?”
但是抽象类不是可以用匿名内部类实现的,就像这样


但是在这里要说明直接去new抽象类,肯定是不行的,编译器会提示”XXX类是抽象的; 无法实例化“的错误。

扩展:匿名内部类,就是不需要对class的定义,直接用new 后面跟一个基类(接口),然后类体里面实现方法即可,然后JVM会调用编译器生成的构造器来生成这个内部类对象,并且编译器会生成这个内部类的类结构。匿名内部类主要是语法简单,但是它不同于一般类通过class定义所以不方便阅读。匿名内部类还有一些限制:匿名内部类不仅可以扩展类(可以实现伪多重继承),也可以实现接口,但是不能两者同时进行,且只能实现一个接口!


然后第二个例子说:"抽象类没有构造方法并且系统也不会自动生成它的构造方法,所以它不能实例化"
       但是在抽象类中是可以有构造方法的,只是它不可以直接创建抽象类的实例对象。
       因为实例化子类的时候,就会初始化父类,不管父类是不是抽象类都会调用父类的构造方法,初始化一个类,先初始化父类。 


      上面的只是我个人看到之后的见解,有什么错误请大神们留言,继续学习!

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643004.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号