【问题标题】:Accessing a method defined in the Superclass [Java]访问超类 [Java] 中定义的方法
【发布时间】:2014-11-17 08:15:02
【问题描述】:

如果我定义 2 个类;一个叫做 Super,它有一个叫做 potato() 的方法,第二个叫做 Sub,它扩展了 Super。

然后我声明一个 Sub 类型的对象;

即子胡萝卜;

在同一个包中的第三个类/main中。

我可以通过carrot.potato() 访问第三类/main 中的potato() 方法吗?

【问题讨论】:

  • 你能给我们看看代码吗?答案取决于此处的访问修饰符。
  • 我已经将它简化了一点,所以我不必担心显示我的代码。我的问题是相当假设的,但想象一下 potato() 方法是公开的。
  • @Agressive 是的,你可以。如果您使用正确的访问修饰符,如 Suresh 所述
  • potato 不是一个好的方法名称(即使是这样的示例)。
  • @Zabri potato 这个名字没有错。除非您想与 String#indexOfCollection.stream 之类的名称抗衡。

标签: java inheritance methods polymorphism extends


【解决方案1】:

Sub 扩展 Super。这意味着 sub 是一个带有一些额外细节的超级。这意味着您可以将 sub 完全视为 Super 对象。所以carrot.potato() 是正确的。

【讨论】:

  • 漂亮,这正是我的想法。但是,尝试这样做时出现此错误:“无法从 super 对非静态方法 blabla 进行静态引用”。如果方法被自己类型的对象访问,为什么方法必须是静态的?
  • @AggressiveSneeze。这意味着您不是从 object 访问该方法,而是从静态方法访问该方法。这与继承无关,您的问题似乎与继承有关。
  • 但我通过(sub 类型的对象名称).methodname() 访问它。这不正确吗?
  • 对不起,我在想 Python 代码。如果你在一个静态代码中并且你试图访问这个类中的另一个方法,它必须是静态的。除非您使用的是对象的方法。
【解决方案2】:

由于每个 Child Is-A Parent ,您也可以通过 Child 访问该方法。假设它是一个公共方法(正如你在 cmets 中提到的)。

如果您想了解我在第一条评论中的意思,have a look here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 2020-05-06
    • 2014-01-21
    • 2019-05-28
    • 1970-01-01
    • 2019-08-03
    • 2020-03-13
    • 2017-08-22
    相关资源
    最近更新 更多