Java子类继承父类的一个小坑

        我遇到的这个小坑就是,在调用构造方法的时候,子类(派生类)重写了父类构造方法中的方法,会出现没有初始化值得问题。可能我描述的不是很清楚,直接上代码看得清晰一些。

        父类

package cn.ALeeCJ.learningproject.JavaLearning;

import android.util.Log;

public abstract class ParentClass {

    public ParentClass(){
        Log.i("ALeeObj", "父类构造方法开始");
        init();
        Log.i("ALeeObj", "父类构造方法结束");
    }

    protected abstract void init();

    public abstract void print();
}

        子类

package cn.ALeeCJ.learningproject.JavaLearning;

import android.util.Log;

public class SonClass extends ParentClass {

    private String sonStr1 = "sonStr1";
    private String sonStr2 = "sonStr2";

    public SonClass(){
        Log.i("ALeeObj", "子类构造方法开始");
        Log.i("ALeeObj", "son sonStr1: " + sonStr1);
        Log.i("ALeeObj", "son sonStr2: " + sonStr2);
        Log.i("ALeeObj", "子构造方法结束");
    }


    @Override
    protected void init(){
        Log.i("ALeeObj", "init sonStr1: " + sonStr1);
        Log.i("ALeeObj", "init sonStr2: " + sonStr2);
    }


    public void print(){
        Log.i("ALeeObj", "sonStr1: " + sonStr1);
        Log.i("ALeeObj", "sonStr2: " + sonStr2);
    }
}

        测试类

package cn.ALeeCJ.learningproject.JavaLearning;

import cn.ALeeCJ.learningproject.BaseActivity;
import cn.ALeeCJ.learningproject.R;

public class JavaLearningView extends BaseActivity {

    @Override
    protected void setContentView(){
        setContentView(R.layout.empty_layout);
    }

    @Override
    protected void init(){
        SonClass test = new SonClass();
        test.print();
    }

    @Override
    protected void addListener(){

    }
}

        测试结果

说明:

子类继承父类,如果重写了父类构造方法中包含的方法(如此次测试的init()方法),一定要注意,在子类中声明的变量(如此次测试的sonStr1和sonStr2),即使初始化了,仍会是默认值(此次为String类型,所以为null),如果子类声明的变量是和父类同名的变量,会以父类的为准。子类继承父类,只有重写方法有效,重写属性无效。在子类声明的变量,无论是否初始化了,在父类的构造方法阶段,都不能拿到子类声明的变量属性,只有执行到子类的构造方法,才能得到。因此一定要注意是不是做好空处理,不然就是崩溃问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值