java 继承详解

来源:互联网 发布:禅道部署到linux 编辑:程序博客网 时间:2024/05/23 07:25

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
原创粉丝点击