【问题标题】:Java SE 7 Programmer I Oracle CertificationJava SE 7 程序员 I Oracle 认证
【发布时间】:2017-01-27 03:24:00
【问题描述】:

我找到了 Oracle 的 Java SE 7 Programmer I 认证的示例问题,我不明白为什么正确答案如下:feline cougar c

class Feline {
  public String type = "f ";
  public Feline() {
    System.out.print("feline ");
  }
}
public class Cougar extends Feline {
   public Cougar() {
      System.out.print("cougar ");
   }
   void go() {
      type = "c ";
      System.out.print(this.type + super.type);
   }
   public static void main(String[] args) {
      new Cougar().go();
   }
}

当我们使用继承时,我们不应该获得 Cougar 类的 type 属性吗? (意味着我们将以两个 type 属性结束?一个用于 Feline,一个用于 Cougar?)为什么 type = "c " 会影响父属性和子属性?我认为只有当我们执行 super.type = "c" 时才会发生这种情况?感谢您的帮助。

【问题讨论】:

  • 请引用您认为的原因意味着我们将以两种类型属性结束
  • @SotiriosDelimanolis 我正在等待一个可笑的具体骗局:)
  • 您好 Delimanolis,谢谢您的回答,我认为 Java 中的继承特性之一是将属性从父级复制到子级?
  • 它们没有被复制;他们是遗传的。两个类都会引用同一个变量。
  • 这意味着子类可以访问超类中的字段。但它是同一个领域。

标签: java inheritance


【解决方案1】:

状态和行为都是继承的,所以你最终只有一种类型。

【讨论】:

  • 当然,有一些特殊的规则,例如子构造函数必须调用父构造函数,但是如果父构造函数没有参数构造函数,这也会自动发生。此外,由于 Java 中的所有方法都是虚拟的,因此如果父类和子类的方法具有相同的签名,则无论变量声明的类型如何,都会调用子类的版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多