子类继承父类的构造函数(方法)吗?

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

你老师是对的,不过一下子说不清楚。给你个例子。
class A{
public A(){} // 1:无参数构造方法。
public A(String s){} // 2.
}

class B extends A{
public B(String s){
super(s); // 3.
}
}

说明:如果没有1处的无参数构造方法,那么3处一定要主动调用父类带参数的构造方法。
如果有1处的构造方法,那么3处代码可以不要,因为Java会自动默认调用父类的无参数构造方法。

记住一点:在构造子类时,一定会调用到父类的构造方法。
所以父类要么有一个默认的无参数构造,这样Java会自动调用这个无参数的构造。如果父类没有无参数的构造,那么就要你自己在子类的构造中,通过super()的方式调用父类的构造。

1、根据面向对象中关于继承这个概念子类继承父类所有的属性和方法。
2、由于构造函数非常特别,对它的调用就像是调用一个C函数一样,而不是利用对象来调用的。
3、可以看到,在Java中可以利用super关键字来访问本类父类的构造方法。这样在一定程度上也消除了歧异性
4、可以证明在Java中子类继承父类构造方法,并且子类可以通过super来访问父类的构造方法,只要父类的构造方法不是private。

最近我看见有人问过这个问题。在此我想表达一下自己的观点。
根据面向对象中关于继承这个概念子类继承父类所有的属性和方法。那么既然是所有的那么本人认为也应当也包括构造函数(方法)。
我先举一个C++的例子:classParent{private:intp;public:Parent(void):p(0){}Parent(inti):p(i){}};classChild:publicParent{private:intc;public:Child(void):Parent(
),c(0){//在这里,创建Child对象时先构造父类域}Child(inti):Parent(i+1
),c(i){//同上}};
由于构造函数非常特别,对它的调用就像是调用一个C函数一样,而不是利用对象来调用的(若不先构造对象哪儿来的对象?)。因此鉴于这份特殊性我们可以这么考虑:
将上述代码中classChild:publicParent去掉: public Parent,我们可以编译试试,是否能成功。事实上正是因为Parent与Child有亲子关系,所以Child构造函数中可以调用Parent的构造函数先对其Parent域进行初始化。这个特点非常符合工程学详见我的文章《我比起Java更喜欢C++的理由语义》。
下面将贴出相应的Java代码:classParent{privateintp;publicParent(){p=0;}publicParent(inti){p=i;}}classChildextendsParent{privateintc;publicChild(){super();c=0;}publicChild(inti){super(i+1);c=i;}}
我们可以看到,在Java中可以利用super关键字来访问本类父类的构造方法。这样在一定程度上也消除了歧异性比如你也可以在Child类中的某一个方法中这么写:Parent p = new Parent();而利用super()就表示了子类在初始化本类域前先初始化其父类域。这也可以证明在Java中子类继承父类构造方法,并且子类可以通过super来访问父类的构造方法,只要父类的构造方法不是private。


构造函数可以继承吗?
不能,因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。继承的含义其实是“扩展”,子类完全没必要扩展父类的构造函数,因为每次调子类的时候都会“自动运行”它父类的构造函数,如果真的...

c# 中 子类不继承父类的构造函数 但是子类默认调用父类的构造函数,这两...
public MyBase() { Console.WriteLine("MyBase构造函数"); } } \/\/ 这个是子类,继承了父类 public class MyClass : MyBase { public MyClass() { Console.WriteLine("MyClass构造函数"); } } class Program { static void Main(string[] args...

python类的继承有多少方法(2023年最新分享)
如下Child类就可以直接使用父类的print_title()方法 实例化Child的时候,子类继承了父类的构造函数,就需要提供父类Person要求的两个属性变量name及sex: 在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May既是Child又是Person)。但是,反过来就不行(Peter仅是Person,而不是Child)。 继承...

JAVA中 子类与父类构造方法的关系 个人理解
编写JAVA作业时在继承的环节发现了一些错误,希望总结一些规律:(以下全部属于自己归纳,可能有问题)一句话概括就是:子类一定会调用(不是继承)父类的构造方法!即遵循一个原则:子类的构造一定是在父类已构造的基础上!这句话要分为几种情况来理解(下面只讨论父类有构造函数):子类构造函数自动调...

C++中派生类是不继承父类的构造函数的,请问这个构造函数是指得什么?包...
构造是不会继承的,这句话的意思是:子类对象不能 (用点的方式) 访问父类的构造。但不代表子类实例化时父类构造不会运行。一句话,父类不能只写有参构造(无参被屏蔽了),若一定只写有参构造,那就必须 子类要显式调用父类的有参构造。 否则就会报错。因为,除了上述情况外,子类会无条件的...

java,中的子类继承父类,子类如何调用父类的构造函数?举一个简单的例子...
子类无条件调用父类的无参构造函数,实例:父类:package com.test;public class TestFatherClass { private String name="abc";TestFatherClass(){ System.out.println("1、这是父类的无参构造函数");} TestFatherClass(String a){ System.out.println("2、这是父类的有参构造函数");} } 子类...

子类继承父类时,是否只能调用父类的无参构造函数
这个是应该选B,是这样的,在实例化一个子类对象的时候,如果不写SUPER关键字,那么JVM会自动调用父类的无参 构造方法 ,如果需要用到父类的有参构造方法,那么必须用SUPER关键字来传参,不管在什么时候,实例化子类对象的时候都先调用父类的构造方法 ...

c# 子类如何调用父类的构造函数
可以使用base(传递给父类构造函数的参数来调用)。如:using static System.Console;class B:A { static void Main(){ new B();ReadKey();} internal B():base("父类"){ WriteLine("子类");} } class A { internal A(string msg){ WriteLine($"{msg}");} } ...

子类都会首先调用父类的构造函数吗?
C#判断题:扩充类继承基类,会首先调用基类的构造函数再调用自己的构造函数,但是并不继承基类的构造函数 对的,如果基类有多个构造函数,派生类应该选择一个合适的基类构造函数调用。Java的每个子类的构造函数都要显式的调用它的直接父类的构造函数 错 父类有无参方法时 子类会隐式的调用父类的...

java中子类继承父类后 子类可以有自己的构造函数么
可以。你不写的话,会自动生成一个无参的构造方法。如果父类没有无参构造方法,子类必须写一个构造方法里面调用父类的构造方法。

台安县13550918956: 子类继承父类的构造函数(方法)吗? -
尉迟咳肾上: 1、根据面向对象中关于继承这个概念子类继承父类所有的属性和方法. 2、由于构造函数非常特别,对它的调用就像是调用一个C函数一样,而不是利用对象来调用的. 3、可以看到,在Java中可以利用super关键字来访问本类父类的构造方法.这样在一定程度上也消除了歧异性 4、可以证明在Java中子类继承父类构造方法,并且子类可以通过super来访问父类的构造方法,只要父类的构造方法不是private.

台安县13550918956: 子类会执行父类构造函数的方法么 -
尉迟咳肾上: 在Java中,子类的构造过程中,必须 调用其父类的构造函数,所以说,子类对象比父类对象大,子类对象里面包含了一个父类的对象,这是内存中真实的情况.构造方法是new一个对象的时候,必须要调的方法,这是规定,

台安县13550918956: 子类能继承父类的哪些变量和方法 -
尉迟咳肾上: (1)子类继承父类的成员变量,包括实例成员变量和类成员变量. (2)子类继承父类除构造方法以外的成员方法,包括实例成员方法和类成员方法.(3)子类不能继承父类的构造方法,因为父类的构造方法用来创造父类对象,子类需定义自己的构造方法,用来创建自己的子类.(4)子类可以重新定义父类成员.

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

台安县13550918956: java中,子类能不能继承父类的构造方法? -
尉迟咳肾上: 你老师是对的,不过一下子说不清楚.给你个例子. class A{public A(){} // 1:无参数构造方法. public A(String s){} // 2.}class B extends A{ public B(String s){ super(s); // 3.}}说明:如果没有1处的无参数构造方法,那么3处一定要主动调用父类带...

台安县13550918956: 关于java中子类继承父类的构造方法 -
尉迟咳肾上: java继承中对构造函数是不继承的,只是调用(隐式或显式). 举例说明:public class FatherClass { public FatherClass() {System.out.println(100);}public FatherClass(int age) {System.out.println(age);} }public class SonClass extends ...

台安县13550918956: 在Java中子类能否重载父类的构造方法 -
尉迟咳肾上: 子类不能重载父类的构造方法,由于在java中类的构造函数与类的名称相同,不可能子类和父类使用相同的类名称,因此子类也就不能重载父类的构造函数,但子类可以通过super来调用父类的构造函数.

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

台安县13550918956: java中子类继承父类的构造方法吗 -
尉迟咳肾上: class Child extends Parent { public Child(){ super(); } }

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