如何在Java中调用抽象类的默认构造函数
我试图研究这个问题,但没有找到一个明确的问题。请帮我做这件事 在子类的构造函数中,可以调用如何在Java中调用抽象类的默认构造函数,java,constructor,Java,Constructor,我试图研究这个问题,但没有找到一个明确的问题。请帮我做这件事 在子类的构造函数中,可以调用 super(/*params if needed*/); 为了调用其父类的构造函数,可以在子类中使用super。您可能知道,您无法创建抽象类的实例 abstract class Parent{ Parent(){ System.out.println("Parent contructor!"); } } public cla
super(/*params if needed*/);
为了调用其父类的构造函数,可以在子类中使用super。您可能知道,您无法创建抽象类的实例
abstract class Parent{
Parent(){
System.out.println("Parent contructor!");
}
}
public class Child extends Parent{
public Child() {
super();
System.out.println("Child contructor!");
}
public static void main(String[] args) {
new Child();
}
}
即使您没有在子类中指定super,仍然会调用父类构造函数,因为在生成.class时,编译器会将super放在子类的默认构造函数中。如果父类中只有参数化构造函数,则必须通过子类构造函数中的super..parameter显式调用父类构造函数。希望这有帮助 类似这样:
abstract class MyClass{
int val;
public MyClass( int val) {
this.val= val;
}
}
class Test extends MyClass{
public Test () {
super(2);
}
}
虽然不能为abstract类调用默认构造函数,但可以为体现抽象类的子类调用默认构造函数 例如:
abstract class Animal {
public Animal (){ ... }
abstract public String sound();
}
class Horse extends Animal{
public Horse(){
super()
}
@Override
public String sound(){
return "neigh";
}
}
class Dog extends Animal{
public Dog(){
super()
}
@Override
public String sound(){
return "woof";
}
}
制造一种新的动物是不可能的。对于常见类型的动物,您可以使用Annomy创建新的Dog-s和Horse-s示例:
将创建您提供的具体类的新实例:
Dog fido = new Dog();
Horse hack = new Horse();
Dog puppy = makeAnimals( fido ); // new uninitialised Dog instance
Horse foal = makeAnimals( hack ); // new uninitialised Horse instance
我不知道这是否符合目的。我想省略问题的目的是投反对票的一个原因
或者,您可以创建注释性实例
Animal parrot = new Animal() {
@Override
public String sound(){
return "squawk";
}
}
作为制作新动物类型的一种方法。如果你在为真实的动物做一些事情,可能最好是创建一个Parot子类。如果没有任何肮脏的魔法,你不能创建抽象类的实例。你不能实例化一个抽象类,而是从一个子类,你可以用super方法调用父构造函数。@Deepak幸运的是,我知道脏魔法MyAbstract childObject=new MyChildClass;mir,我相信MyClass是抽象类中的参数化构造函数。@Deepak父抽象类中没有默认构造函数,子类中使用的构造函数必须显式调用父构造函数。Sanket D,我擅长super,并且不能创建抽象类的实例。但我对您的答案感到困惑的是,具有print语句的“Parent”应该是默认构造函数,因此根据您的示例,默认构造函数可以在抽象类中定义。默认构造函数和参数化构造函数都可以在抽象类中定义
Animal parrot = new Animal() {
@Override
public String sound(){
return "squawk";
}
}