欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Day04有关继承的小结(二)

程序员文章站 2022-04-11 12:41:08
...

子类不能继承父类的内容

引入:
子类继承父类,子类得到了父类的属性和行为。
但是并非所有的父类的属性和行为等子类都可以继承。
子类不能继承父类的东西:
子类不能继承父类的构造器:子类有自己的构造器。(没有争议)

public class ExtendsDemo {
    public static void main(String[] args) {
        Cat c = new Cat();

        System.out.println(c.tempName);
    }
}

class Cat extends Animal{

}

class Animal{
 
    Temp a = new Temp();

}

class Temp{
    String tempName = "暂时";

}

如上面的代码我给Animal设置了个构造器,然后让Cat继承了Animal正常来说,Animal中能实现的功能Cat中也能实现但是在实现类中构造了个Cat的构造器无法用子类Cat来实现Temp中的功能。所以上述成立。

有争议的观点(扩展):
子类是否可以继承父类的私有成员(私有成员变量,私有成员方法)?

public class ExtendsDemo {
    public static void main(String[] args) {
        Cat c = new Cat();
        System.out.println(c.pName);//成功
        System.out.println(c.name);//报错
    }
}

class Cat extends Animal{

}

class Animal{

    private String name = "动物名称";
    public String pName = "公共动物名称";

}

如上述可知我在父类Animal中设置了private使成员变量name私有化,然后在实现类中调用报错了。但是这个观点是错误的等之后讲反射可以暴力**。

– 我认为子类是可以继承父类的私有方法的,只是不能直接访问而已。
– 以后可以暴力去访问继承自父类的私有成员~~

子类是否可以继承父类的静态成员?

public class ExtendsDemo {
    public static void main(String[] args) {
        Cat c = new Cat();
        System.out.println(c.name);
    }
}

class Cat extends Animal{

}

class Animal{

    static String name = "静态动物名称";

}

上述代码看似正常运行也就是说子类可以继承父类的静态方法,但是这个观点是错误的。子类只是可以访问父类的静态成员,父类的静态成员只有一份可以被子类共享访问。 共享并非继承。

相关标签: Java回顾 java