子类成员数目一定大于等于父类成员数目

简介: 子类成员数目一定大于等于父类成员数目

1 问题描述

这个问题是来源于我的导师给我提出的问题,在学习子类与父类的关系之后,子类可以继承父类的属性及方法。那么子类是否可以继承父类的所有方法和属性呢?子类与父类的具体继承关系是怎样的呢?本文围绕这个问题展开说明。

2 问题分析

这个问题涉及到多种可能性,因此我们只有通过实验的方式来得到我们想要的结果。我认为这个实验需要4个类才能完成,三个类用于实现继承关系,一个类用于测试。接下来就来看一下我实验的具体结果。

3 解决方案

首先我创建了四个类,如下:

然后我给每个类(除了Test类)都给了他们自己的方法和属性:

然后我们来继承一下:

我发现类和类之间的继承和接口的实现不同,一个类可以同时实现多个接口,但是一个子类只能继承一个父类,我试了一下同时继承两个父类,但是没有成功,但是类之间可以多重继承,意思就是子类继承父类,然后“孙类”继承父类,子子孙孙无穷无尽。

完成子类和父类的继承关系测试之后,我们来看看子类到底能继承父类多少东西。这里就字需要用到三个类了,两个有继承关系的类和一个测试类。这里我就只用到了Rectangle类和Shape类,还有一个测试类。首先我们在测试类里面实例化一个Shape对象,调用一下他和他父类的所有属性和方法:

我们看到,无论是父类的private(私有的)属性和方法还是他自己本身的private(私有的)属性和方法都无法被调用,图片中红色字体和红色下划线的都为报错。

最后,在没有改变属性的private属性的情况下,我只能给这个私有属性添加一个公共的set和get方法,才成功的在测试类中调用到了他,意思就是当属性为私有的时候,我们需要通过反射的方法去调用这个属性。那么私有的方法怎么办呢?

调用私有方法也是一样,因为java是一个安全性能很高的编程语言,所以私有变量就只能在内部类里面调用,这样才符合面向对象的编程思想。因此我们可以在内部类里面用公有的方法去调用私有方法之后,在测试类中我们就可以间接的调用私有方法。

4 总结

我们都知道,在java语言中的类可以存在继承关系,子类和父类的关系就好比一个儿子和一个父亲,父亲的财产总是会交给儿子,儿子拿到财产之后,儿子还可以创造自己的财产,这样儿子的财产就比父亲原来的财产多了。然后儿子的儿子也就是这里所说的父亲的孙子,还可以继续继承他自己父亲的财产。但是我们发现私有类只能在内部类里面调用,上面的实验也证明了这一点,并且无论是父类的私有类还是子类自己的私有类,我们在测试类中都无法直接调用,需要间接的调用。但是这并不是代表子类不能继承父类的私有类,只是私有类无法直接调用而已。因此,我得出的结论还是子类成员数目一定大于等于父类成员数目,只是私有成员变量我们要通过一些特殊方式才能调用。

目录
相关文章
|
5月前
|
算法 前端开发
3020. 子集中元素的最大数量
3020. 子集中元素的最大数量
30 0
|
2月前
去除数组重复成员的方法
去除数组重复成员的方法
28 2
|
12月前
交换两个数的值的方法(三种)
交换两个数的值的方法(三种)
56 1
|
5月前
|
C++
『C/C++』Eg4: 求自定类型元素的平均
『C/C++』Eg4: 求自定类型元素的平均
|
人工智能 Unix BI
1370:最小函数值(minval)
1370:最小函数值(minval)
变量等于0时的判断问题
变量等于0时的判断问题
74 0
|
索引
判断数组成员的几种方法
在开发中经常需要我们在数组中查找元素又或者是判断元素是否存在,所以我列举了几种常用的方法供掘友参考学习。
120 0
运算符优先顺序(包含类型说明)
运算符优先顺序(包含类型说明)
170 0
运算符优先顺序(包含类型说明)
|
测试技术 C#
C# 遍历类的属性并取出值
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。    十年河东十年河西,莫欺少年穷    学无止境,精益求精    今天有点胡思乱想,想遍历MVC Model的属性并取值:    这个方法还是很简单的,通过反射即可遍历属性,我总结的方法如下: namespace WeiXinApi.
1740 0