May*_*ari 40 java inheritance constructor
我是java编程语言的初学者,最近我研究过构造函数不能在java中继承,有谁能解释一下为什么?
我已经阅读了C++的这个链接
Lak*_*ake 36
简单来说,构造函数不能被继承,因为在子类中它具有不同的名称(子类的名称).
class A {
A();
}
class B extends A{
B();
}
Run Code Online (Sandbox Code Playgroud)
你只能这样做:
B b = new B(); // and not new A()
Run Code Online (Sandbox Code Playgroud)
相反,方法使用"相同名称"继承并可以使用.
至于原因:继承构造函数没有多大意义,因为类A的构造函数意味着创建类型A的对象,而类B的构造函数意味着创建类B的对象.
您仍然可以使用 A内部B的实现中的构造函数:
class B extends A{
B() { super(); }
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ail 16
你在说什么是Java语言水平.如果构造函数是继承的,那么就不可能使类成为私有的.我们知道方法可见性不能降级.Objectclass有一个无参数构造函数,每个类都扩展Object,所以在构造函数继承的情况下,每个类都有一个无参数构造函数.这打破了OO原则.
字节码级别上的情况有所不同.创建对象时,会调用两个运算符:
我们可以修改字节码,以便为Child类分配内存,并从Parent类调用构造函数.在这种情况下,我们可以说构造函数是继承的.如果我们不关闭字节码验证,JVM将在加载类时抛出异常.我们可以通过添加-noverify参数来实现.
结论:
Sur*_*tta 12
子类从其超类继承所有成员(字段,方法和嵌套类).构造函数不是成员,因此它们不是由子类继承的,但是可以从子类调用超类的构造函数.
您可以参考为您的类提供构造函数的文档