【问题标题】:Which methods can a subclass inherit in Java?Java子类可以继承哪些方法?
【发布时间】:2011-09-14 05:55:47
【问题描述】:

对不起,我是 Java 新手。我试图了解 Java 中的继承和子类/超类关系。

如果 classA 是 classB 的子类,那么 classA 的协议会包含属于 classA 的所有方法,还是只包含那些声明为 public 和 package 的方法?

classA 的协议能否具有继承自其超类 ClassB 的私有方法?

【问题讨论】:

  • 答案中的常见错误,除了波西米亚人的错误。即使是私有的被继承 - 它们只是不能子类化代码。但如果从祖先方法调用,它们仍然存在并且可以工作。

标签: java inheritance


【解决方案1】:

首先,“继承”一词并不完全正确。你的意思是“可见”。

  • publicprotected 始终可见
  • private 不可见
  • 默认(又名“包”)可见性 - 即没有指定的可见性 - 仅当子类在同一个包中时才可见(对于同一包中的 any 类也是如此)李>

【讨论】:

    【解决方案2】:

    所有公共和受保护的方法和变量都将被继承。子类中具有相同签名的任何方法都将覆盖超类的行为。子类不会继承私有方法和变量。如果在同一个包和子类中,默认(也称为包可见性级别)将被继承。

    【讨论】:

      【解决方案3】:

      ClassA 将继承 classB 的所有公共和受保护方法。它不会包含 classB 的私有方法。

      【讨论】:

      • 默认可见性怎么样?
      • 默认可见性是私有的。
      • 默认可见性是(惊喜!)默认
      【解决方案4】:

      ClassB 的私有方法对 ClassA 不可见。如果你想让 ClassA 访问 ClassB 的内部方法(这些方法不成为 ClassB 的公共接口的一部分),你应该让它们受保护而不是私有。

      【讨论】:

        【解决方案5】:

        public 标记的公共方法可供每个班级使用。 由protected 标记的受保护方法可用于子类和友好类,它们是同一包中的类。 友好的类可以使用无标记(即默认)的友好方法。 私有方法仅对类本身可用。

        static 标记的静态方法可以在没有对象的情况下访问它们。这些由 ClassName.foo()、SuperClassName.foo() 调用(如果没有被覆盖,则不需要,foo() 是可以接受的)或 ClassName.foo()(不必要,foo() 是可以接受的) 仅当一个对象具有该类的对象时,才可以使用无标记(即默认值)的动态(检查词汇???)。例如:bar.foo()、this.foo()(不需要,foo() 可以接受)或 super.foo()(如果没有被覆盖,则不需要,foo() 可以接受) 被@Override注解的重写方法只能通过super.foo获得

        所以在 ClassB 的实例中,ClassA 的所有 protectedpublic 成员和方法都可以访问。在静态调用中,只能访问静态方法。

        【讨论】:

          【解决方案6】:

          不继承私有方法。仅继承受保护的、公共的和默认的方法。

          A 类将提供在 A 类和 B 类中都公开的方法

          【讨论】:

          • 错了!默认不继承。同一包中的任何类都可以看到默认的可见性方法。如果子类在同一个包中,则为是,否则为否。
          • ClassA 只能在同一个包中使用 ClassB 的默认方法。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-30
          • 1970-01-01
          • 2021-05-04
          相关资源
          最近更新 更多