如何停止构造函数从继承在继承java派生类尝试使用私人但不工作
问题描述:
我想要没有人重写我的构造函数试图使用私有方法,但它给我的错误如何停止覆盖我的构造函数如何停止构造函数从继承在继承java派生类尝试使用私人但不工作
class bc {
int a;
bc() {
System.out.println("hi this is construvtor ");
a = 10;
System.out.println("the value of a=" + a);
}
}
class dc extends bc {
int b;
dc() {
a = 20;
System.out.println("derived dc");
System.out.println("derived value of a=" + a);
}
}
public class sup {
public static void main(String[] args)
{
dc s1 = new dc();
}
}
答
构造函数没有被覆盖,方法是。
当您在子类中使用与父类中的哪一个相同的参数添加构造函数时,它不覆盖父类中的哪一个。
它只提供一种方法来以调用父类构造函数的相同方式实例化子类。
在父类中使用private
构造函数将使该类不能继承,因为子类构造函数需要调用父构造函数,并且父类中的构造函数会阻止它。
答
构造函数不能被覆盖,因为它们不是类的成员。子类构造函数默认调用超类默认构造函数。如果你不想让它被调用,那么你可以在超类中创建一个参数化的构造函数,并在子类的构造函数中调用它。
class bc {
int a;
bc() {
System.out.println("hi this is construvtor ");
a = 10;
System.out.println("the value of a=" + a);
}
bc(int i){}
}
class dc extends bc {
int b;
dc() {
super(1); // invoking super class parameterized constructor
a = 20;
System.out.println("derived dc");
System.out.println("derived value of a=" + a);
}
}
public class sup {
public static void main(String[] args)
{
dc s1 = new dc();
}
}
答
构造函数没有被覆盖是正确的。但我想根据您的查询添加一些信息。 只有在具有非私有说明符的父类上有另一个构造方法时,才可以使父类的构造方法为private,并且在这种情况下,必须使用super
从子类构造方法中调用该非私有超类构造方法。
N.B .:尽管在做这样的事情时没有实际的用例。只是为了您的查询private
constructor
。尝试下面的代码:
class bc {
int a;
private bc() {
System.out.println("-----------------------");
}
private bc(int s){
System.out.println("write logic");
}
bc(int a,int b){
System.out.println("***************");
}
}
class dc extends bc {
int b;
dc(int a) {
super(8,9);
}
}
public class sup {
public static void main(String[] args)
{
new dc(9);
}
}
您在包括错误,也没有展示你是如何使用的私有方法不是。 – Tschallacka
构造函数没有被覆盖......所以这会很复杂。你可以重载一个构造函数。但是在一个子类中,你需要再次定义构造函数,并且根据你想要使用的“supe”构造函数调用'super(...)'。但是这不是过分 – AxelH
每个类都可以有它自己的构造函数,并且你不能禁止它。你可以做的不是让你的课程通过在你的课堂定义中增加“final”来扩展。 – Alex