package com.wtd;

public abstract class Car {
private String name= "car"; public Car(String name) {
this.name = name;
}
} public class JeepCar extends Car {
public JeepCar(String name){
super(name);
}
}

现在我要创建JeepCar的实例,JeepCar jC= new JeepCar();那么我在debug的过程中,看到jvm运行的时候,先调用抽象父类的构造器Car(){},将属性初始化,然后回到JeepCar(){}子类构造器。

疑问:因为知道抽象类是不能初始化的,那么super(name)调用父类构造器,会初始化父类实例吗?如果不初始化父类实例,那么也就是说调用构造器并不一定初始化实例了,那这里的super(name)又有什么用处呢?

对这些疑问,自己很迷惑,所以只有求助于网络了。从网上找了些感觉比较靠谱的解释。

解释1:

  调用子类构造方法都会调用它的直接父类的构造方法。可以认为new才会返回一个实例的引用,而抽象类是不能new的(这个是规定,没理由)。
调用子类构造方法是调用了它的抽象父类的构造方法,但构造方法是用来做初始化工作的,它并不会返回实例。

解释2:

  抽象类中的构造方法其实是用来给继承的子类来用的,因为构造方法相当于初始化方法,当子类调用构造方法时必须调用父类构造方法,所以你可以在子类产生对象 时抽象类中按需求初始化抽象类中的字段以及执行一些初始化代码。其实并不是一定要生成某个类的实例才调用构造方法,子类也需要调用父类构造方法。而生成实 例也并不一定会调用构造方法,在某些特殊实现中或者特殊情况下,生成实例不会调用构造方法。而调用了构造方法也不一定就生成了一个实例,但是那一定是一个 实例调用的,就像一个普通的实例方法一样。

解释3:

  抽象类不能被实例化是说Person p=new Person();这样是错误的;但是Person p=new Employee(); 是可以的,创建子类的实例,父类的引用指向它
在上述主程序中,new Employee后,它会初始化对象,初始化顺序为:
父类静态块初始化---->子类静态块初始化---->父类非静态块初始化---->父类构造方法---->子类非静态块初始化---->子类构造方法。(先静后动,先父后子) 
这个主程序会先初始化person类的非静态属性和构造函数再初始化employees类的非静态属性和构造函数

这就是你第一个问题的当子类的父类为抽象类时,构造方法如何追溯?而抽象类作为父类也会创建实例么?没有创建实例只是构造函数在对抽象类Person的属性初始化,对于一个类的声明,赋值     和使用两件事情,前者不需要实例化,后者必须实例化 。

自己的简单总结:类的构造器,不论抽象还是非抽象,作用都一样,就是初始化属性的;

        只有构造器和new连在一块使用时,才是创建类的实例(对象)。

        抽象类中的构造方法是怎么回事?就是初始化属性的作用。

    

最新文章

  1. ASP.NET Core 中文文档 第四章 MVC(2.2)模型验证
  2. JavaScript 基础回顾——函数
  3. Android View 如何测量
  4. 基础知识《四》---Java多线程学习总结
  5. MongoDB工具简要说明
  6. 9.cadence.封装1[原创]
  7. [iOS微博项目 - 2.3] - 用户取消对app的授权
  8. ActionScript:Resampling PCM data
  9. Java并发编程有多难?这几个核心技术你掌握了吗?
  10. Jmeter下载时Binaries和Source两类包的区别
  11. codeforces 868C Qualification Rounds
  12. ROS(indigo)ROSPlan框架
  13. django-枚举类型扩展方法
  14. K8S 部署 ingress-nginx (一) 原理及搭建
  15. OSI七层模型与TCP/IP五层模型(转)
  16. hdu3374 String Problem【最小表示法】【exKMP】
  17. 【WebService】WebService之CXF和Spring整合(六)
  18. Scala详解---------数组、元组、映射
  19. Maven属性(properties)标签的使用
  20. sea.js模块化工具

热门文章

  1. Python开发【模块】:Pygal 绘制直方图
  2. java-mybaits-00102-mybatis框架原理
  3. java一些基本的方法
  4. cocos进阶教程(5)回调函数和定时器的使用技巧
  5. (转) bicabo Visual Studio 2012自动添加注释(如版权信息等)
  6. A题:Common Substrings(KMP应用)
  7. R语言统计词频 画词云
  8. Mail.Ru Cup 2018 Round 1
  9. React 函数传参
  10. Refactoring #002 Inline Method