java 子类继承父类属性 this打点调用初始化父类属性 父类中无有参构造方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 子类继承父类属性 this打点调用初始化父类属性 父类中无有参构造方法相关的知识,希望对你有一定的参考价值。

接口:

实现类1:

实现类2:

抽象类:

子类1:

子类2:

测试类:

在抽象类中我没有通过构造方法为其属性初始化赋值,而是在子类中通过this.父类属性 为父类属性赋值,测试结果和在抽象类中通过有参构造方法为其属性赋值且在子类构造方法中用super调用父类构造方法的结果相同,请问前者(也就是图片中的方法)的写法和后者运行效率上有什么区别?哪种写法更好更规范?谢谢O(∩_∩)O

区别不大

因为所有类如果没声明构造方法,默认是有个无参数构造方法

所以图片中其实是这样的,以子类BomBird构造为例子

public BomBird(ShoutAbility shout_ability)

    super();//默认这里是省略的但是前提是父类有无参数构造方法
    this.shout_ability=shout_ability;//子类继承父类所以可以用this,你也可以super.shout_ability=shout_ability;

你说的后者写法也没错,效率没有太大区别

写法可以有很多,但是不能说一定要怎么写,多方面考虑

但是更好的是对父类的封装,抽象为父类是为了封装一系列共有通用属性,变量因情况而定可以是private protected修饰,提供set和get方法,这个东西现在没法说清楚,不同的代码环境有不同的写法,只有慢慢积累,你每个写法都要知道,以后在工作中,代码扩展中自然能看出各种写法优劣,才能更面向对象,更具有扩展性!

比如接口定义行为标准,这些东西不是一下就能让你明白的,

欲速不达的道理,主要是平时自己多写写,多看看其他成功代码,想下别人为什么这样写,为什么不那样写,各个的优缺点,慢慢积累


参考技术A 这个写法更多应该考虑的是面向对象的封装思考,不应该暴露父类封装的成员和实现的细节,应该将那个变量设置为private。
至于效率上:1,有差别也不大
2,不会是性能的瓶颈。

为啥java的子类中必须调用父类的构造方法

参考技术A csdn博客上有个人说的比较好,参考一下:
子类继承父类的字段和方法。
你想那么子类中从父类继承的字段,要谁来初始化呢?
父类中有这些字段的初始化方式,所以最好的选择就是用父类的构造方法。
设计者,可能是这么考虑的。
再告诉你一个事,每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象。
java创建对象的三个步骤就是,申请内存,调用构造方法,返回对象引用。
所以说,为了那个内置的父类对象,也需要进行初始化。

以上是关于java 子类继承父类属性 this打点调用初始化父类属性 父类中无有参构造方法的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中,子类将继承父类的所有属性和方法吗?为啥?

子类为啥不能直接调用父类的属性

java中,子类的构造器为啥要调用父类构造器?

java中的继承

java this 子类调父类,父类再调用子类已覆盖的方法及属性(又一次理解)

子类如何调用父类private修饰的属性或方法?