java 继承详解

java继承原理说明

1,子类将父类中的所有成员变量继承过来并隐藏,而且不会覆盖。
2,对于方法,子类继承过来后进行覆盖而非隐藏。
3,对于声明类型,只有该声明类型的类中定义的才可见(包过隐藏的)。

package inherit;

public class TestInherit extends Father{
    String str = "i am son!";

    @Override
    public String getStr() {
        return str;
    }


    //只在子类中定义的变量和方法
    String sonOlny = "i am difined only in son!";

    public String getSonOlny() {
        return sonOlny;
    }

    public static void main(String[] args) {
        Father father = new TestInherit();

        /**
         * 1.对于变量,子类将父类中的变量继承过来,并默认隐藏。
         * 2.因为声明的是父类型的,所以默认访问的是从父类中继承过来
         * 3.如果想访问子类中的,可以通过强制类型转换。
         */
        System.out.println(father.str);
        System.out.println(((TestInherit)father).str);

        System.out.println("----------------------");

        /**
         * 1.对于方法,子类是并没有将父类中的继承过来隐藏,而是进行了覆盖,所以
         *   不管是声明为父类型的,还是子类型的,只要是子类的实例对象,那么执行
         *   的就是子类定义的方法,因为只有这个方法,没有隐藏的方法。
         */
        System.out.println(father.getStr());
        System.out.println(((TestInherit)father).getStr());

        System.out.println("----------------------");

        /**
         * 1,因为声明是按照父类的类型来声明的,虽然是子类的实例对象,虽然包含子类中的所有方法,
         *    但是对于父类中没有定义的方法,对于声明为父类型的实例仍然是不可见的。
         * 2,因为实例对象实际是子类对象的实例,所以它除了包含父类中的变量,还包含子类的变量和方法,
         *    所以仍然可以通过强制类型转换,访问子类中的不可见得方法和成员变量。
         */
        System.out.println(((TestInherit)father).sonOlny);
        System.out.println(((TestInherit)father).getSonOlny());
//        System.out.println( father.sonOlny);   //这样会报错,不可见

        System.out.println("---------------------");

        /**
         * 1.所以综合来说,继承中,方法覆盖是特例,其余的都会直接继承过来
         * 2.对象的声明,限定了对象的变量和方法的可见范围。
         */
        System.out.println(father.only);
        System.out.println(father.getOnly());
        System.out.println(((TestInherit)father).only);
        System.out.println(((TestInherit)father).getOnly());
    }
}

class Father{
    String str= "i am father!";

    public String getStr() {    
        return str;
    }

    //只在父类中进行定义的变量和方法
    String only="i only difined in father!";

    public String getOnly() {
        return only;
    }
}

运行结果:

i am father!
i am son!
----------------------
i am son!
i am son!
----------------------
i am difined only in son!
i am difined only in son!
---------------------
i only difined in father!
i only difined in father!
i only difined in father!
i only difined in father!

Process finished with exit code 0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值