第 16 单元:继承

测试您的理解情况

返回到第 16 单元

问题 2、3 和 5 请参阅以下代码清单:

package com.makotojava.intro;

public abstract class Person {
   
   private String name;
   
   String friendlyVariable;
   
   protected Person(String name) {
      this.name = name;
      this.friendlyVariable = name;
   }
   
   protected abstract boolean validate();
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

}

package com.makotojava.intro2;

public class Employee extends Person {
   
   private String title;
   
   public String getTitle() {
      return title;
   }

   public void setTitle(String title) {
      this.title = title;
   }
   
   public static void main(String[] args) {
      Employee e = new Employee();
      
      e.getName();
   }

}
  1. 如果有必要,Java 类可成为其他许多类的直接子类(通过 extends)。解释您的答案。
    1. 。一个 Java 类能有至多一个直接的超类
  2. 此问题请参阅前面的代码清单。 Employee Person 的子类。解释您的答案。
    1. 。通过 extends 关键字, Empolyee Person 的一个子类。
  3. 此问题请参阅前面的代码清单。Employee 可以自由访问 PersonfriendlyVariable 变量,因为它是 Person 的子类。解释您的答案。
    1. 。因为 Employee Person 在不同的包内,它不能访问 Person 内的包私有数据。
  4. Employee 不需要实现 Personvalidate() 方法。解释您的答案。
    1. 。因为 Employee 没有被声明 abstract ,它要求实现它的子类已经实现的任何抽象方法。
  5. 此问题请参阅前面的代码清单。更正 Employee 代码,以便它能够编译。
    package com.makotojava.intro2;
    
    import com.makotojava.intro.Person;
    
    public class Employee extends Person {
       
       private String title;
       
       public Employee(String name, String title) {
          super(name);
          this.title = title;
       }
    
       public String getTitle() {
    
          return title;
       }
    
       public void setTitle(String title) {
          this.title = title;
       }
       
       public static void main(String[] args) {
          Employee e = new Employee("John Doe", "Worker Bee");
          
          e.getName();
       }
    
       @Override
       protected boolean validate() {
          // TODO Auto-generated method stub
          return false;
       }
    
    }
  6. 假设类 A 没有声明构造方法。如果类 B 继承 A,则它不需要实现任何构造方法。解释您的答案。
    1. 。当一个类继承了另一个无构造方法的类,并且类实例化时,编译器会自动地将生成一个无参构造方法。
  7. 构造方法可以像其他任何方法一样被继承。解释您的答案。
    1. 。构造方法是不被继承的,并且一定是显式实现。唯一的例外就是无参构造方法,事实上不是继承的,而是在某个特定的环境之下编译器自动生成的。
  8. 一个包含两个构造方法的类如何从一个构造方法调用另一个?
    1. 通过使用 super() 关键字。
    2. 通过使用 this 关键字表示构造方法。编译器将生成剩余部分。
    3. Java 类不允许拥有多个构造方法。
    4. 默认情况下,当同一个类中包含两个或更多构造方法时,编译器会生成方法存根,这些存根会自动相互调用。
    5. 通过在调用构造方法的第一行代码上使用 this 关键字表示被调用构造方法,并传递正确的参数。
    6. 上述选项都不是。
  9. 如何实例化 abstract 类?
    1. 通过调用它的公共构造方法。
    2. 不可能实例化抽象类。
    3. 不存在抽象类。
    4. 上述选项都不是。
  10. 使用泛型超类实现抽象化的主要目的是什么?
    1. 抽象化方便了代码重用。
    2. Java 中的抽象的工作方式与 C++ 或其他语言中不同。
    3. 实现抽象的超类无法实例化。
    4. 抽象化提供了一种让代码运行得更快的方式。

返回到第 16 单元