关于java继承的一些理解错误

来源:互联网 发布:手机网站源码模板 编辑:程序博客网 时间:2024/06/14 21:00

今天在看wifi源码的时候,发现一个自己在java 继承方面知识理解的一些缺陷。在这儿记录一下。
先上代码吧:

这是父类:

public class Father {    public String  getName(){        Log.d("cxxp","Father getName()");        return getTrueName();    }    public String getTrueName(){        Log.d("cxxp","Father getTrueName()");        return null;    }    public String getResult(){        Log.d("cxxp","Father getResult()");       return getName();    }}

这是子类1

public class Son1 extends Father{    @Override    public String getName() {        Log.d("cxxp","Son1 getName()");        return "son1";    }    @Override    public String getTrueName() {        Log.d("cxxp","Son1 getTrueName()");        return "son1 is true name";    }    public String getMyResult(){        Log.d("cxxp","Son1 getMyResult()");        return getResult();    }}

这是子类2

public class Son2 extends Father{    @Override    public String getName() {        Log.d("cxxp","Son2 getName()");        return "son2";    }    @Override    public String getTrueName() {        Log.d("cxxp","Son2 getTrueName()");        return "son1 is true name";    }    public String getMyResult(){        Log.d("cxxp","Son2 getMyResult()");        return getResult();    }}

这是调用

    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.bt_son1_getresult:                Son1 s1 = new Son1();                tv.setText(s1.getMyResult());                break;            case R.id.bt_son2_getresult:                Son2 s2 = new Son2();                tv.setText(s2.getMyResult());                break;            case R.id.bt_father_getresult:                Father father = new Father();                tv.setText(father.getResult());                break;        }    }

这是 log

//case R.id.bt_son1_getresult:子类1调用 没有重写的方法 getMyResult()10-30 08:41:16.634 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Son1 getMyResult()10-30 08:41:16.634 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Father getResult()10-30 08:41:16.634 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Son1 getName()case R.id.bt_son2_getresult:子类2调用 没有重写的方法 getMyResult()10-30 08:41:20.735 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Son2 getMyResult()10-30 08:41:20.735 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Father getResult()10-30 08:41:20.735 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Son2 getName()case R.id.bt_father_getresult:父类调用 getResult() 方法10-30 08:41:23.652 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Father getResult()10-30 08:41:23.652 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Father getName()10-30 08:41:23.652 2535-2535/com.cxp.dyzc.stringdemo D/cxxp: Father getTrueName()

为了便于理解这个场景,再附上一张图:

这里写图片描述

怎么去理解最终打出的log?

把子类的方法当做子类加上父类的方法即可
子类可以调用父类的方法,但是父类在没有子类对象的情况下无法调用子类的方法。
父类的public方法,子类都会继承
是子类的对象所以要用子类的方法

自己的理解,如果有误,请大神指教,不胜感激。

原创粉丝点击