为了账号安全,请及时绑定邮箱和手机立即绑定

请问一下是不是继承了抽象类,则在main()函数中不能调用子类的成员函数。如图所示。

58073e1e0001b33a05000237.jpg

58073e2300014ae105000238.jpg

58073e260001a0e405000249.jpg

58073e2b000120ec05000237.jpg

如图所示

在main()中。shape1能使用成员函数进行赋值。

而在Circle中,成员函数和成员变量定义在了Circle中。就在main()方法中调用不了。

请问这是为什么?

正在回答

3 回答

恩没事

0 回复 有任何疑惑可以回复我~

不是,你在main函数里面创建对象时是小转大了,即你在创建Circle对象时是Shape shape2=new Circle();这样的话,用户在调用子类对象方法时只能调用子类继承父类或者子类重写父类的方法,而你写的这个父类刚好是一个抽象类,则子类对象调用方法时只能调用父类的抽象方法,其他方法已经屏蔽了。个人认为与接口没有特别大的关系。

Shape rt=new Rectangle(3.0f,4.0f);
		rt.Area(3.0f, 4.0f);
		rt.Circumference(3.0f, 4.0f);
		Circle cl=new Circle(5.0f, 3.14f);
		cl.Area(5.0f, 3.14f);
		cl.Circumference(5.0f, 3.14f);
		cl.shuchu();

这是我写的主函数的一部分,其中shuchu()函数是子类自己独有的。编译没报错。

0 回复 有任何疑惑可以回复我~
#1

benyl123

如果没错,应该是这样
2016-10-31 回复 有任何疑惑可以回复我~
#2

慕田峪7021683 提问者

谢谢你的回答!
2016-10-31 回复 有任何疑惑可以回复我~
#3

ViktorZ

能解释一下为什么子类只能调用父类的抽象方法而其他的方法都屏蔽吗?
2016-11-01 回复 有任何疑惑可以回复我~
#4

benyl123 回复 ViktorZ

我并不是这个意思,我的意思是如果你在创建一个类时用多态的话,即Shape rt=new Rectangle(),此时父类的引用指向本类的对象,此时子类继承父类的属性和方法,父类引用只能指向本类继承过来的属性和方法,即前面的Shape将Rectangle子类里面可调用的方法范围变小,而Shape又是抽象类,所以我说此时子类只能调用父类的抽象方法而其他方法都被屏蔽。可以把这部分记忆类比成数学里面的交集。即若A为父类,B为子类,则B包含A,则A^B=A; 但若在创建对象时用Recangle rt=new Rectangle(),此时本类引用指向本类对象,即属性和方法都不缺少,相当于A^A=A.
2016-11-01 回复 有任何疑惑可以回复我~
#5

benyl123 回复 ViktorZ

我是这样认为的,不知道这样理解对不对。
2016-11-01 回复 有任何疑惑可以回复我~
#6

ViktorZ 回复 benyl123

Shape rt=new Rectangle(),父类的引用指向本类的对象,父类是抽象类,子类必须实现父类的抽象方法,而其他方法可以实现也可以不实现,因为子类都继承了,若子类重写了父类的非抽象方法,则可以直接调用, 用子类并没有重写父类的非抽象方法,则用super关键字调用,并不是子类只能调用父类的抽象方法而其他方法都被屏蔽
2016-11-02 回复 有任何疑惑可以回复我~
查看3条回复

接口对象指向引用对象只可以调用引用对象实现的接口方法,不能调用引用对象自己的方法。

我是这样理解的。

0 回复 有任何疑惑可以回复我~
#1

慕田峪7021683 提问者

我好像没有用到那个interface。怎么有个接口对象?
2016-10-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请问一下是不是继承了抽象类,则在main()函数中不能调用子类的成员函数。如图所示。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信