`

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

    博客分类:
  • 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经典继承与父类调用 geter、seter访问器 构造器

    代码中设计了各个类的基类,设置私有成员变量,利用构造器对成员变量初始化,用geter、seter访问器设置、获取成员变量的值。继承基类并创建对象,在子类中调用父类方法。

    【04-面向对象(上)】

    •初始化块和构造器:初始化块总在构造器之前执行,初始化块不能接受形参。 静态初始化块 •用static修饰的初始化块为静态初始化块,由于是静态的,所以是属于类,当类加载时,就执行静态初始化块 , ...

    Java复习题及答案

    3、所有类至少有一个构造器,构造器用来初始化类的新对象,构造器与类同名,返回类型只能为void。 ( ) 4、包是按照目录、子目录存放的,可以在程序中用package定义包,若没有package一行,则表示该文件中的类不...

    JAVA面试题最全集

    使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? 59.使用socket建立客户端...

    疯狂JAVA讲义

    5.5.1 使用构造器执行初始化 141 学生提问:构造器是创建Java对象的途径,是不是说构造器完全负责创建Java对象? 141 5.5.2 构造器的重载 142 学生提问:为什么要用this来调用另一个重载的构造器?我把另一个构造...

    超级有影响力霸气的Java面试题大全文档

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。...

    java 面试题 总结

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。...

    Java面试32个经典问题 .doc

    其初始化可以在两个地方:一是其定义处,也就是说在final变量定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给...

    【05-面向对象(下)】

    •在java类里只能包含Field,方法,构造器,初始化块,内部类(接口、枚举)等5种成员。 用static修饰的类成员属 于类成员,类Field既可通过类来访问,也可以通过类的对象来访问。当通过对象来访问类属性时,系统会在底...

    JAVA 面试32问

    其初始化可以在两个地方:一是其定义处,也就是说在final变量定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给...

    突破程序员基本功的16课.part2

    2.2 父类构造器 2.2.1 隐式调用和显式调用 2.2.2 访问子类对象的实例变量 2.2.3 调用被子类重写的方法 2.3 父子实例的内存控制 2.3.1 继承成员变量和继承方法的区别 2.3.2 内存中子类实例 2.3.3 父、子类的...

    java面试800题

    "类的初始化过程 当创建一个对象时,对象的各个变量根据其类型被设置为相应的默认初始值,然后调用构造方法,而每次调用构造方法都是要执行三个阶段: 1.调用超类的构造方法; 2.由初始化语句对给变量进行初始化...

    java编程练习题

    3.构造器,对height和width进行初始化 4.构造器,对x、y、height、width进行初始化 5.draw()方法,输出"draw in rectangle"和x,y,height,width的值 使用ShapeTest类测试以上代码。 8,某公司的雇员分为以下若干类...

    my_java_study

    子类只能从被扩展的父类获得成员变量、方法和内部类(包括内部接口、枚举),不能获得构造器和初始化块 Java中所有方法都能被继承,包括私有方法(但不可见)和静态方法 /* *静态方法可以被子类继承 *通过类名可以调用...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    生成对象的最后一步是执行构造方法,进行初始化。由于对构造方法可以进行重写 ,所以通过给出不同个数或类型的参数会分别调用不同的构造方法。 例子:以类 Rectangle 为例,我们生成类 Rectangle 的对象: Rectangle p1...

    c#学习笔记——学习心得

    密封方法只能用于对基类的虚方法进行实现,声明密封方法时同时使用sealed和override且必须通过重写基类中的虚方法来实现 名称空间:类似java中的包 集合: 代表: 访问修饰符:private、public、protected、...

    java经典面试2010集锦100题(不看你后悔)

    C) 子类继承父类,如果父类中只有一个构造方法并且有参数,那么在子类的构造方法中必须先用super调用父类构造方法并传参。 D) 以上说法都不正确。 题目11:d 程序如下: class Test { private int day; public int...

Global site tag (gtag.js) - Google Analytics