`

子类初始化时,父类构造器调用自身和子类都有的方法,会执行谁?

    博客分类:
  • Java
 
阅读更多
class Pa {
	String color="黑白";
	public Pa() {
		System.out.println("Pa"+"@"+Test.NUM++);
		print();
	}
	public void print(){
		System.out.println(color+"@"+Test.NUM++);
		}
	
}
class Son extends Pa{
	String color = "彩色";
	String toy = "我有弹弓";
	public Son() {
		System.out.println("Son"+"@"+Test.NUM++);
	}
	public void print(){
		System.out.println(toy+"@"+color+"@"+Test.NUM++);
	}
}
/**
 * 
 */
public class Test{
	public static int NUM = 0;
	public static void main(String[] args) {
		new Son();
//		new Pa();
	}
}

 * 父类Pa构造方法中调用了print(),而子类Son也重写了print();
 * 在new Son()初始化的过程中,子类的成员color和toy都尚未完成赋值,
 * 但是:还是会将方法动态绑定到子类的print()
 * 这点值得注意,现实中很可能因此出现bug。切记!

这是程序输出:

Pa@0
null@null@1
Son@2

 

0
4
分享到:
评论

相关推荐

    java中的继承(子类调用父类构造方法还不懂).doc

    - **调用父类构造器**:最重要的是,`super`可以用于在子类构造器中调用父类的构造器。这对于初始化父类的状态非常有用。 - **追溯父类**:`super`不仅可以用于直接父类,还可以追溯到更远的祖先类。 **2. 调用父类...

    java 子类对象赋值给父类对象的使用

    2. **构造器与初始化**:子类对象在创建时会先调用父类的构造器,确保父类的状态得到正确初始化,然后执行子类自己的构造逻辑。 3. **变量隐藏**:如果子类和父类有同名的实例变量,子类变量会“隐藏”父类变量。...

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    综上所述,程序执行顺序的基本原则是:首先初始化并执行父类的构造器、静态和实例初始化块,然后执行子类的构造器、实例初始化块。最后,当通过子类对象调用方法时,优先执行子类覆盖的方法。理解这一顺序对于编写可...

    java 构造器的调用

    以下我们将详细探讨构造器的调用、初始化成员变量、默认构造器以及继承中的构造器调用。 1. **构造器的调用**: - 当我们创建一个类的实例时,会自动调用构造器来设置初始状态。例如: ```java class MyClass { ...

    子类调用抽象父类.zip

    子类可以通过`super`关键字调用父类的构造函数,确保初始化时父类的属性得到正确的设置。 总结一下,子类调用抽象父类涉及到以下主要知识点: 1. **抽象类**:不能被实例化,含有抽象方法。 2. **抽象方法**:只有...

    Java4Android 19_子类实例化过程

    这是因为子类继承了父类的属性和方法,所以在创建子类对象时,必须确保父类的数据成员被正确初始化。这是通过隐式调用super()来实现的,super()是子类构造器中调用父类无参构造器的语法。如果父类没有无参构造器,...

    JAVA经典继承与父类调用 geter、seter访问器 构造器

    在父类中定义构造器,子类可以通过`super`关键字调用,以确保父类的初始化逻辑得以执行。例如,子类的构造器可能会这样写:`public Student(String name) { super(name); }`,这里`super(name)`调用了父类的构造器。...

    Java类继承初始化顺序

    举个例子,如果我们有一个名为`Animal`的父类和一个名为`Dog`的子类,`Animal`有一个`sound()`方法,`Dog`重写这个方法,那么创建`Dog`的实例时,调用`sound()`会执行`Dog`的实现,而不是`Animal`的。 总之,Java类...

    java父类和子类初始化顺序的深入理解

    4. **父类的非静态实例初始化**:在调用子类构造器之前,父类的实例变量会被初始化。在这个例子中,`Art`类的构造器`Art()`被调用,打印出"Art"。注意,这是在`Cartoon`的构造器开始执行之前发生的,即使`Art`的构造...

    javase子类父类继承关系图解

    5. **父类的用户定义构造器**:如果在子类构造器中指定了父类的特定构造器,那么该构造器会被调用,执行其相应代码。 6. **子类的非静态初始化块**:接下来,子类的非静态初始化块被执行,用于初始化子类的实例变量...

    对象初始化流程梳理对象初始化流程梳理

    `Son`类的非静态属性`b4`、非静态块以及`b5`的初始化按顺序进行,然后调用子类构造器`TestTest 类的构造器`。 6. **子类构造器**: - **子类构造器**:子类构造器负责设置子类的非静态属性初始值,如果在子类构造...

    Java面向对象(进阶)- super关键字的使用与子类对象实例化全过程

    - **super调用构造器**:子类的构造器可以使用`super(参数列表)`来调用父类的构造器,初始化父类的状态。 举例1:在`Person`类中定义了`eat()`和`sleep()`方法,`Student`类继承`Person`并重写了这两个方法。在`...

    继承与接口的含义以及其子类相关的含义

    当创建子类对象时,会先调用父类的构造器来初始化父类部分,然后执行子类的构造器。如果子类没有显式调用父类构造器,Java会默认调用无参构造器。如果父类没有无参构造器,则子类必须显式调用一个合适的父类构造器。...

    java 静态块实例块构造器调用

    当创建对象时,构造器会被调用来初始化对象的属性。 ```java public class Parent { public Parent() { System.out.println("Parent constructor"); } } ``` ### 继承中的调用顺序 在Java继承体系中,子类会...

    JAVA类的初始化顺序文.pdf

    需要注意的是,如果父类中有参数化的构造器,而在子类中没有显式调用它,Java会自动添加一个`super()`调用来确保父类的构造器被调用。此外,静态成员不会因为创建类的实例而重新初始化,它们只在类加载时初始化一次...

    EnumTest--构造顺序:父类、类成员变量、子类.zip

    2. **类成员变量初始化**:在所有父类构造器执行完毕后,接着会初始化枚举类自身的成员变量。这些变量包括在枚举声明中定义的任何字段。成员变量的初始化按照它们在代码中的顺序进行。 3. **子类构造器**:最后,...

    276.274.JAVA基础教程_面向对象(中)-super调用属性和方法(276).rar

    子类构造器在执行时,首先会调用父类的构造器来初始化父类的状态,然后才进行子类自身的初始化。 - `super`关键字通常用在子类构造器的第一行,以确保父类的构造器先被调用。 6. **访问限制** - `super`关键字...

    C#程序设计-3期(KC008) KC008110100021-C# 构造器和C++ 构造器是否相同?.docx

    C#也支持这种方法,但它还引入了一种称为“构造函数重定向”或“构造函数初始化器”的特性,这使得可以通过一个构造器调用另一个构造器,从而避免代码重复。 C++中的构造器可以是虚函数,而C#的构造器则不能。在C++...

    JAVA面试题解惑系列.pdf

    当我们创建`SubClass`的实例时,首先会执行父类的静态初始化,然后是子类的静态初始化,接着是父类的非静态初始化和构造器,最后是子类的非静态初始化和构造器。 在子类中,如果存在覆盖父类的方法或变量,那么在...

Global site tag (gtag.js) - Google Analytics