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

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

1 问题描述

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

2 问题分析

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

3 解决方案

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

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

然后我们来继承一下:

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

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

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

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

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

4 总结

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

目录
相关文章
|
8月前
|
算法 前端开发
3020. 子集中元素的最大数量
3020. 子集中元素的最大数量
42 0
数组筛选,将数组[2,0,6,1,77,0,52,0,25,7]中大于等于10元素选出来,放入新数组,声明一个新的数组用于存放新数据newArr,遍历原来的旧数组,找到大于10的元素,依次追加新数组
数组筛选,将数组[2,0,6,1,77,0,52,0,25,7]中大于等于10元素选出来,放入新数组,声明一个新的数组用于存放新数据newArr,遍历原来的旧数组,找到大于10的元素,依次追加新数组
不使用第三变量。如何对2个数进行交换
不使用第三变量。如何对2个数进行交换
89 0
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
定义一个包含10个整数元素的数组,初始值由用户给定。找出数组中的最大数并连同下标一起输出。
245 0
变量等于0时的判断问题
变量等于0时的判断问题
88 0
(转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
背包问题。     不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法:     只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在这些集合中搜索等于10的就可以了。
660 0
(方法与方法重载运用)控制台输入一个数,判断,如果是素数,调用fenJie(这个数)方法,打印为1*这个数,如果不是素数,调用fenJie(这个数,a)方法,判断这个数是否是a的倍数。
(方法与方法重载运用)控制台输入一个数,判断,如果是素数,调用fenJie(这个数)方法,打印为1*这个数,如果不是素数,调用fenJie(这个数,a)方法,判断这个数是否是a的倍数。
137 0
(方法与方法重载运用)控制台输入一个数,判断,如果是素数,调用fenJie(这个数)方法,打印为1*这个数,如果不是素数,调用fenJie(这个数,a)方法,判断这个数是否是a的倍数。
判断正负数个数
判断正负数个数
113 0