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

来源:10-3 Java 中的抽象类

慕田峪7021683

2016-10-19 17:37

58073e1e0001b33a05000237.jpg

58073e2300014ae105000238.jpg

58073e260001a0e405000249.jpg

58073e2b000120ec05000237.jpg

如图所示

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

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

请问这是为什么?

写回答 关注

3回答

  • benyl123
    2016-11-01 09:53:40

    恩没事

  • benyl123
    2016-10-31 22:23:59

    不是,你在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()函数是子类自己独有的。编译没报错。

    Viktor... 回复benyl1...

    Shape rt=new Rectangle(),父类的引用指向本类的对象,父类是抽象类,子类必须实现父类的抽象方法,而其他方法可以实现也可以不实现,因为子类都继承了,若子类重写了父类的非抽象方法,则可以直接调用, 用子类并没有重写父类的非抽象方法,则用super关键字调用,并不是子类只能调用父类的抽象方法而其他方法都被屏蔽

    2016-11-02 09:34:18

    共 6 条回复 >

  • 慕粉4178486
    2016-10-19 18:19:12

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

    我是这样理解的。

    慕田峪702...

    我好像没有用到那个interface。怎么有个接口对象?

    2016-10-19 18:58:35

    共 1 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530561 学习 · 6091 问题

查看课程

相似问题