java 既然子类能继承父类的所有属性与方法,那子类不能不定义成员变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 既然子类能继承父类的所有属性与方法,那子类不能不定义成员变量?相关的知识,希望对你有一定的参考价值。

问题是子类能不能不定义自己的成员变量? 不好意思!

参考技术A 子类重写父类的方法只要满足几个条件,方法名相同,修饰符和返回值范围不比父类小即可。与方法体没有任何关系 参考技术B 楼主说的是
子类能不能定义成员变量是吗?
答案是可以的啊.
子类只是继承了弗雷的属性和方法,
但是也可以定义自己的特有类型和方法的
参考技术C 想定义就定义,不想定义就不定义,无所谓,没有要求
要是和父类同名直接调用为子类
调用父类用super

Java中子类能继承父类的私有属性吗?

前段时间去听老师讲课的时候,老师告诉我子类是可以继承父类所有的属性和方法的。当时我是极其疑惑的,因为之前学校考试时这个考点我记得很清楚:子类只能继承父类的非私有属性和方法。老师给我的解释是这样的——先看下面一段代码

/**
 * 定义父类
 * @author CBS
 */
public class Father {
    private String name;//私有属性
    private char sex;
    
    public void tell(){
        System.out.println(name+sex);
    }
    
    private void speak(){
        System.out.println(name+"is speaking!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

}
/** * 定义子类,子类中什么都不写。 * @author CBS */ public class Child extends Father { }
/** * 定义测试类 * @author CBS */ public class Test { public static void main(String[] args) { Child c=new Child(); c.tell();//tell方法是可以用的 //c.speak();//报错,父类的私有方法不可见 } }

我们可以看到测试类中即使没有给Child类对象的属性进行赋值,tell方法依旧是可用的。如果Child类中没有继承父类的私有属性,那么tell方法应该会报错。由此得出的结论是,子类会继承父类的所有东西,而修饰符只是影响属性或者方法对外是否可见。

但是个人比较同意Java官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。

Java中修饰符的作用是封装类中的属性和方法使其对外不可见,官方文档的解释很好的兼顾了Java的继承和封装。继承是为了更好的提高代码的重用性,封装则保护了代码的不可见部分。在编写代码的过程中,我们显然即想提高代码的重用性,也不希望类中的某些域被随意修改。那么这样的继承机制就很合理了。另外就生活中的例子来说,Java官方文档的解释也很契合。比如,我们不可能完全继承父母的一切(如性格等),但是父母的一些无法继承的东西却仍会深刻的影响着我们。

当然以上的这些理由并不充分,只是笔者的个人见解。关于继承的问题,知乎对此也有讨论,下面这个帖子总结的比较全面,证据也很充足,大家可以去看看:

链接:https://www.zhihu.com/question/51345942/answer/145388196  作者:Robin







以上是关于java 既然子类能继承父类的所有属性与方法,那子类不能不定义成员变量?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA中,子类将继承父类的所有属性和方法么~?为啥?

Java中子类能够继承父类的private属性或方法吗

JAVA中,子类将继承父类的所有属性和方法吗?为啥?

java中,子类能调用父类中所有方法、对象吗?是不是父类也能调用子类所有……?

JAVA中子类能不能继承父类的私有属性和方法?

Java中子类能继承父类的私有属性吗?