如何停止构造函数从继承在继承java派生类尝试使用私人但不工作

如何停止构造函数从继承在继承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(); 
    } 

} 
+1

您在包括错误,也没有展示你是如何使用的私有方法不是。 – Tschallacka

+1

构造函数没有被覆盖......所以这会很复杂。你可以重载一个构造函数。但是在一个子类中,你需要再次定义构造函数,并且根据你想要使用的“supe”构造函数调用'super(...)'。但是这不是过分 – AxelH

+1

每个类都可以有它自己的构造函数,并且你不能禁止它。你可以做的不是让你的课程通过在你的课堂定义中增加“final”来扩展。 – Alex

构造函数没有被覆盖,方法是。
当您在子类中使用与父类中的哪一个相同的参数添加构造函数时,它不覆盖父类中的哪一个。
它只提供一种方法来以调用父类构造函数的相同方式实例化子类。

在父类中使用private构造函数将使该类不能继承,因为子类构造函数需要调用父构造函数,并且父类中的构造函数会阻止它。

+1

我会补充说,如果我们将每个构造函数设置为'private',我们可以将该类设置为'final',以直接通知该类不能被继承。这并不多,但... – AxelH

+0

@AxelH在大多数情况下,它是正确的,它使事情更清晰。好点子。请注意,你有一个角落的情况:你仍然可以让这个类没有'final'来从类本身创建它的匿名类。 – davidxxx

+0

的确,好点!即使我不喜欢那个词(我发现它也是一个懒惰的“特征”),这个班可以被看作是有效的final_ ^^) – AxelH

构造函数不能被覆盖,因为它们不是类的成员。子类构造函数默认调用超类默认构造函数。如果你不想让它被调用,那么你可以在超类中创建一个参数化的构造函数,并在子类的构造函数中调用它。

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 .:尽管在做这样的事情时没有实际的用例。只是为了您的查询privateconstructor。尝试下面的代码:

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); 
    } 

}