作者有话要说:

最近在重新回顾JavaSE部分的知识,在学习抽象类的时候,我们都知道抽象类是不可实例化的,当时不知道怎么的就将下面的部分(Test.java中的代码)敲出来了,就让我产生了疑问,总感觉抽象类可以进行实例化,通过查阅相关的资料,解决了这个疑问,如果有什么不对的地方,请见谅,并希望你及时留言我将进行改正。

目录:

  • 一.项目结构
  • 二.实例化对象,匿名内部类,多态
    • 2.1 什么是实例化对象
    • 2.2 什么是匿名内部类
    • 2.3 什么是多态
  • 三.回答抽象类是否可被实例化

让我产生疑问的下面项目中序号3部分的代码:

一.项目结构

1.项目结构:

2.Animal.java

3.Test.java

运行情况:

产生疑惑:Test.java中我们可以看到Animal抽象类可以像对象一样去使用难道抽象类真的实例化吗?

二.实例化对象,匿名内部类,多态

解决这个问题你需要搞懂三个问题:

2.1 什么是实例化对象

实例化的过程,是通过对应的构造方法(有参/无参构造)对对应的对象进行初始化,从而创建该对象。

语法结构如下:

类名 对象名=new 类名();

2.2 什么是匿名内部类

当我要去使用某个抽象类/接口的时候我需要做的就是写一个子类来继承该抽象类/实现该接口,然后通过在子类中重写对应的方法,在外部通过实例化该子类,再调用相应的方法,从而实现了对该抽象类/接口的使用,匿名内部类就是不用去写这个抽象类/接口的子类,直接创建该子类,并重写相应的方法,从而实现了对该抽象类/接口的使用。

语法结构如下:
java
new 父类名或者接口名(){
//相应的方法重写
}

该部分相关学习链接:
Java中内部类详解—匿名内部类
接口和抽象类有什么区别?(备注看第2,3回复)

2.3 什么是多态

在子父类中(继承关系),子类重写父类相关的方法,父类引用指向子类对象:Animal animal= new Dog();条件下,一个类具有多个形态,根据对象的不同执行的动作也会不同(方法),比如父类Animal,有二个子类Dog,Cat,二个子类都重写了Animal的eat()方法,当父类指向Dog对象的时候Animal animal= new Dog();,执行的就是Dog的eat()【狗吃骨头】,当父类指向Cat对象的时候Animal animal= new Cat();执行的就是Cat的eat()【猫吃鱼】。

向上转型:父类 对象名=new 子类();
向下转型【强制类型转换】:子类 对象名=(子类)new 父类();

该部分相关学习链接:
菜鸟教程多态性
JAVA的多态用几句话能直观的解释一下吗?
java方法的多态性理解

三.回答抽象类是否可被实例化

回答上面的问题:

抽象类不能被实例化,只能被子类化!

首先先分析一下Test.java中代码:
右面部分:创建Animal的匿名内部类(创建的是Animal的子类)
左面部分:Animal的子类对象向上转型为父类对象(多态的使用)

答:从实例化对象的角度出发,上面部分的代码并没有进行对象的实例化,不满足对象实例化的语法(类名 对象名=new 类名();)上面部分代码只是通过匿名内部类创建了一个Animal抽象类的子类,然后通过多态向上转型为Animal对象。
该部分相关学习链接:
关于抽象类无法实例化,但是可以使用“new“来实例的疑问

Java关于抽象类是否可以实例化问题相关推荐

  1. java抽象类为什么不能实例化?

    Q:抽象类中一定有构造器,为什么不能实例化? A: ① 抽象类中的构造器是用来子类实例化的时候调用的,子类要加载父类的属性和方法.(不能因为是抽象类就和继承相矛盾) public class Demo ...

  2. Java抽象类为什么能实例化?

    在学习Java网络编程的时候,我们都写过如下代码: Socket socket = new Socket("127.0.0.1",9000);OutputStream output ...

  3. java学习--抽象类与接口

    一.抽象 在使用抽象类时需要注意几点: 1.抽象类不能被实例化,实例化的工作应该交由它的子类来完成,它只需要有一个引用即可. 2.抽象方法必须由子类来进行重写. 3.只要包含一个抽象方法的抽象类,该方 ...

  4. java中抽象类 接口_java中的抽象类与接口

    1.抽象类的定义 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 2.简单实例 ...

  5. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

  6. java中抽象类继承抽象类_Java中的抽象类用示例解释

    java中抽象类继承抽象类 Abstract classes are classes declared with abstract. They can be subclassed or extende ...

  7. Java 中抽象类与接口

    Java 抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这个类就是抽象类. 抽象类不能创 ...

  8. java基础—抽象类介绍

    一.抽象类介绍 下面通过一下的小程序深入理解抽象类 因此在类Animal里面只需要定义这个enjoy()方法就可以了,使用abstract关键字把enjoy()方法定义成一个抽象方法,定义如下:pub ...

  9. Java 对抽象类的理解

    Java 对抽象类的理解 抽象类的定义: 类到对象是实例化,而对象到类是抽象. 抽象类: 1. 什么是抽象类? 类和类之间具有公共特征,将这些公共特征提取出来,形成的就是抽象类. 类本身不存在,所以抽 ...

  10. java中抽象类的定义_Java中抽象类的定义和使用

    Java虽然比较简单,但是细节的知识点还是很多的,现在,介绍一下抽象类的定义和实现基础.指的是在类中定义方法,而不去实现它,而在它的子类中去具体实现,继承抽象类的子类必须实现父类的抽象方法,除非子类是 ...

最新文章

  1. admui3字体无法删除_被微信好友删除、拉黑还不知?这3个方法可以自查,看完涨知识了...
  2. 浅谈:数据结构之双链表结构与代码模拟双链表的实现
  3. 解决windows下Error:node with name rabbit already running on “XXX” 和管理页面打不开问题
  4. jmeter一个线程组多个请求_分享一些我在实际项目中使用jmeter压测的一些技术点跟一些踩过的坑吧...
  5. 音频压缩编码技术(一)—有损压缩
  6. java unicodeblock_Character.UnicodeBlock中cjk的说明详解
  7. SQLSERVER大小写转换方法
  8. 计算机大一总结,大一计算机学习心得总结.doc
  9. 解决:vue组件顶部留有空白问题
  10. 基于AST抽象语法树的SQL注入检测 (2) -- 每周小结(01-02~01-08) - .Little Hann
  11. ElasticSearch.bat 文件闪退 解决
  12. 数字货币 2018年市值排行榜前100币种简介
  13. webstorm 常用插件集合
  14. FITC修饰药物;CY3荧光标记氟维司群/依西美坦/齐多夫定/丁二酸(琥珀酸)/醋酸卡泊芬净的定制合成
  15. uwsgi2.0.2 安装及自启动
  16. 21天转型容器实战营(八容器进阶之Kubernetes 应用生命周期原理分析)
  17. C语言——矩阵的上三角化
  18. 三级网络技术考前复习
  19. 从会员标签到画像 应该怎么做?
  20. 目前使用AS400核心系统的银行列表

热门文章

  1. 官宣!什么是新基建时代的混合云? | 凌云时刻
  2. 新兴IT企业特斯拉(八)——自动辅助驾驶
  3. 【优化算法】斑点鬣狗优化算法(SHO)【含Matlab源码 1463期】
  4. 【轨迹预测】基于matlab卡尔曼滤波运动轨迹预测【含Matlab源码 590期】
  5. 循环神经网络 递归神经网络_递归神经网络-第2部分
  6. pandas--groupby相关操作
  7. 将字符'0'-'9'转换为数字(c语言)
  8. java-练习2:MobilePhone
  9. 如何定义适配器adapter类_【设计模式】第六篇:来康康适配器模式
  10. git maven 一键部署_jenkins+git+maven搭建自动化部署项目环境