java父类的构造方法为什么不能被子类继承

作者&投稿:长孙齿 (若有异议请与网页底部的电邮联系)
java中,父类的构造方法不能被子类继承,对吗~

不对。。子类默认继承父类的构造方法 子类创建对象时默认调用自身的空构造器,并在子类构造器中隐式的调用super() 即调用父类的空构造器,如果父类重载了构造器,那么子类必须初始化父类构造器否则编译错误!
class Animal{ private String name; //重载父类构造器 Animal(String name){ this.name = name; } }class Dog extends Animal{ //必须加上 // Dog(String name){ // super(name); // }}class Test{ public static void main (String[] args){ Animal a = new Dog(); //首先调用Dog空构造器 Dog(){ }构造器中第一句话为super()但父类已覆盖空构造器所以 //编译产生错误应添加子类构造器初始化父类构造器 // }}

子类不能继承父类的构造方法。

但创建子类的对象时,调用子类的某个构造方法前,一定会先调用父类的某个构造方法,目的是要初始化子类继承自父类的数据成员。图上反映的就是这个。

子类=父类﹢新增的变量﹢新增的方法。对象语言的构造器作用在于对类创建实例对象时完成对象的初始化工作(为变量申请内存空间等)
因此,子类的构造器除了承担着初始化子类的新增变量和方法,还要初始化父类自身新增加的变量和方法。一般来说,如果在子类的构造器中没有使用super()调用父类相应的构造器,子类的构造器会自动调用父类默认的,也就是不带参数的构造器来初始化父类的东西。
而Java类的默认构造器,当你没有为你写的类建造构造器的时候,Java会自动帮你创建这个默认构造器,但是当你自己编写了构造器后,你自己编写构造器将会覆盖掉默认的构造器,就是说默认的构造器不存在。那么这个时候,你在继承的子类里面没有显示添加super()函数调用你在父类里编写的父类构造器,子类的构造器将不能自动找到父类的构造器。找不到父类的构造器意味着什么?意味着你的子类实例化的时候找不到父类的构造器来初始化父类的东西,不能完成类实例对象的初始化工作,你说你的子类能不出现错误?!
所以,在子类的构造器中需不需要添加super()调用父类相应的构造器,只需要考虑子类的构造器才初始化的时候能不能完成所有变量和方法的初始化就可以了。另外,根据自己初始化工作的需要使用super()调用相应的父类构造器来初始化也是有必要的。
所以你所说的子类不能继承父类构造器,这说明你没有显式的调用seper(),而且父类构造器被你的子类覆盖或调用的父类中没有无参构造器所引起的。

父类的构造器不能不继承,这个是规则!下面代码说嘛了这个问题:class Fruit{public Fruit(String name){System.out.println("执行Fruit类的构造器!!!");}}//定义Apple类并继承fruit类class Apple extends Fruit{//没有编写构造器}public class Test{public static void main(String[] args){//创建对象new Apple("红富士");}}fruit中有一个public得带参构造器,若可以继承那么子类Apple也应该有。创建对象时,试图调用继承来的构造器,但是编译出错出错有两个1,由于父类fruit中没有无参构造器,子类Apple又没有编写自己的构造器明确调用了父类带参构造器,而造成编译出粗偶2,由于构造器不能被继承,因此Apple中没有,带参构造器造成的!

Person(){}把它去掉或者改成Public Person(){}你没有给他修饰符,默认是friendly ,子类是不能继承的

构造方法名与类名相同,只在对象被创建时自动调用

这个不可能吧,你把代码贴下,让大家看看是什么情况。你怎么知道不能继承的


java中的super()是什么
1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有静态类型,就是这个类C本身;它有动态类型,就是当前这个对象的类型。你可以...

java继承的描述
java继承是一个对象获取父对象的所有属性和行为的机制。ava是一种面向对象的编程语言,它既吸收了C++语言的优点,又摒弃了C++中难以理解的多继承和指针等概念。所以Java语言有两个特点,那就是功能强大,使用简单。Java作为静态面向对象编程语言的代表,完美地实现了面向对象理论,让程序员用优雅的思维,进...

AVA爆破战术怎么打
给你个黑色的战术吧1.概况.这张题图是ava爆破图中较小.构造略为简要的一张地图.除了出生地大致分为通往1点的仓库.研究院.t出生地通往2点的路.还有研究院与仓库之间的一条大道.地图制作比较均衡.具有很高的公平性和竞技性.2.详述.这里是简要的说一下对这个图的印象.思路及打法.就不针对地图上每...

ava编程 定义一个人类,包含姓名。性别,年龄等信息,所有的变量必须私有...
keyi1

JAVA是什么意思?
2.OOP中最重要的思想是类,类是模板是蓝图,从类中构造一个对象,即创建了这个类的一个实例(instance)。 3.封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。 4.通过扩展一个类来获得一个新类叫继承(inheritance),而所有的类都是由...

临泉县15398271432: java父类的构造方法为什么不能被子类继承 -
布以颈复: 子类=父类﹢新增的变量﹢新增的方法.对象语言的构造器作用在于对类创建实例对象时完成对象的初始化工作(为变量申请内存空间等) 因此,子类的构造器除了承担着初始化子类的新增变量和方法,还要初始化父类自身新增加的变量和方法...

临泉县15398271432: 为什么java作者要设计,父类的构造方法不能被子类继承 -
布以颈复: 因为父类的构造方法里面可能会含有private的成员 子类是无法访问父类private成员的.

临泉县15398271432: 为什么Java子类不能重载父类的构造方法 -
布以颈复: 子类继承父类的字段和方法.你想那么子类中从父类继承的字段,要谁来初始化呢?父类中有这些字段的初始化方式,所以最好的选择就是用父类的构造方法.设计者,可能是这么考虑的.再告诉你一个事,每当你new一个子类对象的时候,子类对象都隐式内置了一个父类对象.java创建对象的三个步骤就是,申请内存,调用构造方法,返回对象引用.所以说,为了那个内置的父类对象,也需要进行初始化.

临泉县15398271432: java构造函数为什么不可以被继承?求前辈指教
布以颈复: 因为构造函数实在类实例化的时候调用,属于类的私有不允许继承.

临泉县15398271432: java中为什么父类必须有无参构造方法才能被子类继承? -
布以颈复: 你在Xx类里定义了一个带参数的构造方法,那么这个Xx类就没有无参数的构造方法了. 子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了. 你如果在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了.

临泉县15398271432: java中super的用法,是调用父类构造方法?那为什么不直接继承,要返回去再调用呢? -
布以颈复: 是调用父类的的构造方法,因为构造方法不能被继承,所以需要调用父类的,这里分为两种情况,1、当父类中有默认的构造函数时,子类自动调用父类的构造方法;2、当父类中有带参数的构造函数时,子类需要使用super关键字调用父类的构造函数,而且必须放在子类构造方法的第一句.

临泉县15398271432: java构造函数能否被继承,为什么?
布以颈复: 不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”. 继承(extends)的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为反正每次调子类的时候都会“自动运行”它父类的构造函数,如果真的需要子类构造函数特殊的形式,子类直接修改或重载自己的构造函数就好了. 估计是你对“构造函数”的意义本身不理解,“调用”一个类有“继承”和“组合(说白了new 一个类)”两种方式,当你“调用”一个类的时候就会“自动运行”它的“构造函数”.

临泉县15398271432: java在同一类中构造方法能调用成员方法,为什么成员方法不能调用构造方法? -
布以颈复: 第一个问题: 左图第一个方法是构造方法,而show方法是成员方法,构造方法中是可以使用成员方法的,而构造方法是不能显式调用的,在new操作符中会调用构造方法,也就是说,在show方法中,new Student();相当于新建了实例,并调...

临泉县15398271432: 第一次来,问下 java中子类可以继承父类的构造方法么? 可以的话是怎么样继承 ? -
布以颈复: 这个构造方法不叫继承哈 子类的构造方法是必须要调用父类的构造方法的 当然有时候可以不写出来而已 什么时候可以不写呢? 就是父类有无参数的构造方法 子类就可以不用写出来 至于怎样继承: 假如有个A类 另一个B类继承A类 那么B类的构造方法里就要写 public B(){super(); //如果A类的构造方法没有参数 这句就可以省略 如果A类没有无参数的构造方法,你还必须写出来,并且把要传递的参数也写到super(参数);...... }

临泉县15398271432: java中子类如何不调用父类的构造方法 -
布以颈复: 子类必然会调用父类的构造方法.要不然是你显式调用,要不然是Java自动调用.如果父类有不带参数的构造方法,或者父类没有任何构造方法(也就是说有缺省构造方法),那么子类可以不显式调用,子类会自动调用super(); 如果父类有带参数的构造方法,却没有不带参数的构造方法,那么如果子类没有显式调用父类构造方法,那么编译会报错.如 class A { public A(String name) { } } class B extends A { public B() { //如果不显式调用父类构造方法,编译会报错. } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网