class Animal{
Animal(){
System.out.println("Animal's constructor ");
}
Animal(int num){
System.out.println("Animal's constructor"+num);
}
}
class Mankind extends Animal{
Mankind(){
System.out.println("Mankind's constructor ");
}
Mankind(int num){
System.out.println("Mankind's constructor"+num);
}
}
public class kids extends Animal{
kids(){
System.out.println("Mankind's constructor ");
}
kids(int num){
System.out.println("Mankind's constructor"+num);
}
public static void main(String[] args){
System.out.println("start kids'constructor");
Kids3 someKid1=new Kids3();
Kids3 someKid2=new Kids3(999);
System.out.println("end kids'constructor");
}
}
这个例子中,Kids继承了Mankid,Mankid继承了Animal.形象的说,Animal是爷爷,Mankind是父亲,Kids3是儿子.可以看到,在Kid3 somekid1=new Kid3()创建对象时,Kids并不立刻运行自己的构造方法,而是首先输出其爷爷不带参数的构造方法,然后是父亲不低参数的构造方法,最后才是自己不带参数的构造方法(Kids真孝顺啊).在Kid3 somekid2=new Kid3(999)创建对象时,当然,它调用自己带参数的构造方法,可是它不到用其父亲和爷爷的带参数构造方法,而是仍然调用其爷爷和父亲不带参数的构造方法!可以这样理解,Kid3somekid2=new Kid3(999)只是指出超类不带参数的构造方法,但是不能指出要调用超类的哪个构造方法,所以只能调用超类不带参数的构造方法了.因为Kids创建对象时,不管是否带参数,都会自动调用超类不带参数的构造方法,所以,如果把超类Animal和Mankind的不带参数构造方法删除,那么上面的程序就会出现编译错误.解决这个问题有连个方法,其中一个是把超类Animal和Mankind的所有构造方法删除,这样系统会为它们提供不带参数的默认构造方法,另外一个方法就是在Kid3中使用super(int num)调用超类中的带参数的构造方法.
分享到:
相关推荐
子类构造方法的第一条语句通常是调用超类(即父类)的构造方法。这是因为子类继承了父类的属性和方法,所以在初始化子类对象时,也需要确保父类的状态被正确设置。这是通过使用`super`关键字来实现的,其语法如下: ...
- **构造方法**:`super`用于调用超类的构造器,确保子类在实例化时能正确初始化父类的状态。同样,`super`调用必须位于构造方法的第一行。 - **普通方法**:`super`用于调用被重写的超类方法,确保在子类中能够执行...
子类也可以通过构造函数来初始化超类的实例变量,如第七题所述,但子类无法继承超类的构造函数,而是需要在其构造函数中调用超类的构造函数。 1. 判断题中涉及的知识点: - 子类可以有多个超类(多继承),但在...
在 C# 中,父类(也称为基类或超类)是定义了一组属性和方法的类,而子类(也称为派生类)是从父类继承并可能添加更多特性的类。通过继承,子类可以重用父类的代码,同时扩展其功能。 当需要将父类的对象赋值给子类...
在方法中,`super`用于调用超类中被重写的方法,而在构造器中,`super`用于调用超类的构造器,确保子类实例化时,超类的状态也被正确初始化。例如: ```java class Mammal { void getBirthInfo() { System.out....
这种方法可以提供更灵活的实例化逻辑,比如延迟初始化或返回子类实例。 总结,Java中的构造器是至关重要的,它们负责对象的初始化,包括设置成员变量的初始值。了解和掌握构造器的调用、初始化、默认构造器、继承中...
- 调用构造方法时,先初始化超类的非静态成员,然后调用超类构造方法,最后初始化子类的非静态成员和调用子类构造方法。 3. **构造方法**: - 类可以没有构造方法,但如果有多重构造方法,至少需要一个默认构造...
当我们谈论“继承中的构造方法”时,我们实际上是在讨论如何在子类的构造过程中初始化基类的状态。以下是关于这个主题的详细解释: 1. **子类构造过程中的基类构造调用**: 子类在创建对象时,它的构造方法首先会...
- 调用超类构造器:子类可以使用`super`关键字调用超类的构造函数,`super(parameter-list)`必须作为子类构造函数的第一个语句,传递超类构造函数所需的参数。 - 访问隐藏的超类成员:当子类中存在与超类同名的成员...
根据Swift的构造规则,方便构造方法必须最终调用到一个指定构造方法,并且子类的指定构造方法必须直接或间接地调用超类的指定构造方法。 在继承关系中,构造方法的继承有以下特点: 1. 如果子类没有复写任何父类...
当子类继承超类时,可以通过`super()`调用超类的构造器,传递参数以初始化超类的实例变量。这通常在子类的构造器中完成。例如,如果我们有一个`TextEditor`类继承自`BaseTextEditor`,并且`BaseTextEditor`有带参数...
当我们谈论类的继承时,我们指的是一个类(子类)可以获取另一个类(父类或超类)的属性和方法,从而实现代码复用和扩展。在本话题中,我们将深入探讨JavaScript中的类继承,并特别关注`this.callParent`这个方法,...
2. 在一个构造方法中调用另一个构造方法时,调用语句必须是该构造方法的第一条语句。 #### 访问控制符:public、private和protected 1. **public**:表示公有,任何地方都可以访问。 2. **private**:表示私有,仅...
- 继承内部类时,需要在子类构造方法中显式调用超类构造器。 理解并熟练运用这些面向对象的概念,对于编写高质量的Java代码至关重要。这些知识点涵盖了对象生命周期、类的继承、访问控制、抽象、最终性、接口以及...
- **构造方法的存在**:类可以没有构造方法,但有多个构造方法时应有一个默认构造方法。构造方法调用应作为第一条语句,并且可以调用其他构造方法。 4、**访问修饰符public、private和protected** - **public**...
抽象类中允许有构造方法,但是此构造方法是不能直接调用的,是交给子类去调用,子类对象的实例化过程中,永远是先调用父类中的构造方法实例化父类中的属性,再实例化本类中的属性。抽象类中的属性如果要想初始化,则...
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了对象初始化、继承、构造方法、访问修饰符、抽象类、final关键字、接口、多重继承、接口的嵌入、类的嵌入等多个方面。 1. 对象的初始化: - 非静态对象在...