Java SE 7程序员I Oracle认证

Java SE 7程序员I Oracle认证,java,inheritance,Java,Inheritance,我发现了这个由Oracle认证的JavaSE7程序员示例问题,我不明白为什么正确的答案是:猫美洲狮c 当我们使用继承时,我们不应该在类Cougar上获得类型属性吗?这意味着我们将以两种类型属性结束?一只猫一只美洲狮?为什么type=c会影响父属性和子属性?我想只有当我们做了super.type=c时才会发生这种情况?感谢您的帮助。状态和行为都是继承的,因此您只能得到一种类型。请引用您认为的意思,即我们将以两种类型属性结束。@SotiriosDelimanolis我在等待一个可笑的特定副本:嗨,D

我发现了这个由Oracle认证的JavaSE7程序员示例问题,我不明白为什么正确的答案是:猫美洲狮c


当我们使用继承时,我们不应该在类Cougar上获得类型属性吗?这意味着我们将以两种类型属性结束?一只猫一只美洲狮?为什么type=c会影响父属性和子属性?我想只有当我们做了super.type=c时才会发生这种情况?感谢您的帮助。

状态和行为都是继承的,因此您只能得到一种类型。

请引用您认为的意思,即我们将以两种类型属性结束。@SotiriosDelimanolis我在等待一个可笑的特定副本:嗨,Delimanolis,谢谢您的回答,我认为Java中继承的一个特点是它将属性从父级复制到子级?它们没有被复制;它们是遗传的。两个类都将引用相同的变量。这意味着子类可以访问超类中的字段。当然,有一些特殊的规则,比如子构造函数必须调用父构造函数,但是如果父构造函数没有参数,这也会自动发生。另外,由于Java中的所有方法都是虚拟的,如果父类和子类都有具有相同签名的方法,则无论变量的声明类型如何,都会调用子类的版本。
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();
   }
}