[Java] 构造器内部的多态方法行为

今天在看Java编程思想的时候遇上的问题 使用到的知识是Java的多态方法和构造器调用顺序

当我们在导出类构造器中没有显式调用基类构造器时,会默认调用基类的默认构造器,同时如果我们在导出类的方法覆盖了基类的某一个方法,且在这个方法中使用到导出类的参数时,就会出现问题。

可能这番话有点绕 看一下代码 可能会清楚一些。

 package polymorphism;

class base{
//基类中的draw()
    void draw(){
        System.out.println("I am drawing...");
    }
    public base(){
        System.out.println("Before drawing ....");
        draw();
        System.out.println("After drawing....");
    }
}
public class  export extends base{
    private int exportt = 1;
    public export(int Exportt){
        exportt = Exportt;
//        System.out.println("My export is "+exportt);
        draw();
    }
    //导出类的draw()覆盖了基类中的draw()
    public void draw(){
        System.out.println("The export is drawing and my export is "+exportt );
    }
    public static void main(String argv[]){
        new export(5);
    }
}

 这时 如果我们不清楚原因的话 可能认为 我在导出类中已经初始化了 exportt这个变量 为什么会是 0
 原因有以下几点:
 1.在导出类构造器中会首先调用基类的构造器
 2.在基类构造器中没有对exportt进行初始化 所以使用的是int的默认值 0
 3.在进行基类初始化之后 才会对导出类中的变量进行初始化 也就是
 

         int exports = 1;

从这个问题引出了一条构造器准则 也是我想要表达的东西

在构造器中尽可能用简单的方法使对象进入正常状态;如果可以的话,避免调用其他方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值