关于构造对象时候的调用问题

本文通过一个Java示例程序详细解释了在类继承过程中,构造函数调用及方法重写时可能出现的问题,特别是当父类构造函数中调用了可能被子类重写的方法时的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.调用所有的static块            顺序由父向子,同一类中的顺序,按照定义顺序而定

2.子类所有的类属性全部赋为默认值

3.调用父类初始化过程(递归地包括整个构造过程)

4.子类所有的类属性做真正的赋值操作

5.子类的构造函数

 当时这里我们要说的是一个override的一个注意点

我们来看这样一个程序就知道了

class A 
{
public void Draw(){};
public A()
{
Draw();
}

}

public class B extends A
{
String myContent
="luyechen";
public void Draw()
{
    System.out.println(myContent);
}

public B()
{
    Draw();
}

public static void main(String[] args)
{
B b
=new B();
}

}

输出的结果是

null
luyechen
为什么呢,因为A调用的Draw,其实已经是B的Draw.而这如我们看到的,这个时候myCotent只是被赋了默认的值也就是null.所以只能打出null来.

这就提醒我们在构造函数中最好不要用自身的方法来进行初始化,因为我们不知道自己是否会被inherite,这个方法是否会被override.如果非要用自身的方法,最好也是用final的

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值