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 继承问题 -- 子类是否继承父类的私有属性
理解一: 子类会继承父类的所有属性和方法,至于能不能直接访问,那就是访问权限的问题了. 例如:父类有个private String name; 属性.子类会继承下来,但子类访问不了,因为是privat ...
- java中子类会继承父类的构造方法吗?
参考: https://blog.csdn.net/wangyl_gain/article/details/49366505
- javascript中子类如何继承父类
参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/inheritance.html#toc4 function Shape() { this.x = 0; t ...
- JAVA中子类会不会继承父类的构造方法
声明:刚刚接触java不久,如果理解有错误或偏差望各位大佬强势批判 java中子类能继承父类的构造方法吗? 父类代码: class Father { String name ; //就不set/get ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- Java中子类是否可以继承父类的static变量和方法而呈现多态特性
静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制: 它们仅能调用其他的static 方法. 它 ...
- java中继承,子类是否继承父类的构造函数
java中继承,子类是否继承父类的构造函数 java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式) 下面来看例子: public class TestExtends { publi ...
- java中子类继承父类程序执行顺序
java中子类继承父类程序执行顺序 FatherTest.java public class FatherTest { private String name; public FatherTest() ...
- java 子类不能继承父类的static方法
先来看一段代码 /** * Created by bjchengpeng on 2018/7/19. */ /**运行结果 * woof * woofaa * * woof * Basenjiaa * ...
随机推荐
- 08_jquery基础应用第一天
视频来源:麦子学院 讲师:李景山
- ubuntu网桥设置
什么是桥接? 桥接(Bridging),是指依据OSI网络模型的链路层的地址,对网络数据包进行转发的过程,工作在OSI的第二层.一般的交换机,网桥就有桥接作用. 一般的交换机,网桥就有桥接作用.就交换 ...
- windows的MySQL安装
Window环境下: 1.下载MySQL MySQL社区版:https://dev.mysql.com/downloads/mysql/ MySQL商业版:https://www.mysql.com/ ...
- java之拦截器Interceptor
1,拦截器的概念 java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了 ...
- windows下cmd常用
windows下cmd常用 shutdown -s -t 2------2秒后关机 加上-f选项意思是强制执行 shutdown -r -t 2------2秒后重启 加上-f选项意思是强制执行 lo ...
- Go笔记-流程控制
[if] if 是用于测试某个条件的语句,如果该条件(逻辑型或布尔型)成立,则会执行大括号内的代码,第一个大括号必须和if 或者else同行,否则非法 // 方式1 if condition { // ...
- loadrunner调用jar包方法
环境 win7(32位)/winXP+loadrunner11+JDK 1.6(一定要配置JAVA环境变量) 1.Eclipse中创建com.medivh包 package com.medivh; p ...
- 从UUID想到的
1.UUID的定义 通用唯一标识符(UUID)被设计成一个在时间和空间上都独一无二的数字,常被用作唯一性标识. UUID是一个由5位十六进制数的字符串表示的128比特数字,其格式为 aaaaaaaa- ...
- 51NOD 1705 七星剑 [DP 期望的线性性质]
传送门 题意: 七颗星,第$i$课星用第$j$个宝石有$p[i][j]$的概率成功,失败将为$g[i][j]$颗星: 第$j$个宝石化费$c[j]$ 求最小期望化费 $MD$本来自己思路挺对的看了半天 ...
- shell脚本实现anisble客户端脚本分发和密钥授权配置
##############################Deploy ansible client shell######################## echo "start d ...