当前位置: 首页 > 图灵资讯 > 技术篇> 实例解析extends关键字

实例解析extends关键字

来源:图灵教育
时间:2023-04-02 17:42:57

  要想了解extends关键字关键字,首先要了解继承。继承是软件开发人员用来在类别之间建立的is-a关系的编程结构。继承使我们能够从更通用的类别中衍生出更具体的类别。Java通过类扩展支持单一继承,其中一类通过类扩展直接从另一类继承可访问的字段和方法。然而,Java不支持通过类扩展进行多重继承。

  Java通过extends关键字关键字支持类扩展。如果存在,则支持类扩展。extends指定了两类之间的父子关系。下面,我们用extends在类Vehicle和Car之间建立关系,然后在Account和Savingsacount之间建立关系:

  例1. extends关键词指定父子关系

  class Vehicle

  {

  // member declarations

  }

  class Car extends Vehicle

  {

  // inherit accessible members from Vehicle

  // provide own member declarations

  }

  class Account

  {

  // member declarations

  }

  class SavingsAccount extends Account

  {

  // inherit accessible members from Account

  // provide own member declarations

  }

  该extends关键字的类名和指定在另一个类名之后。之前的班级名称extends识别子级,之后的班级名称extends识别父级。之后,extends无法指定多个类名,因为Java不支持基于类的多重继承。

  这些示例将is-a关系整理如下:Car 是一种特殊的Vehicle,SavingsAccount 是一种特殊的Account。Vehicle和Account被称为基类、父类或超类。Car和SavingSaccount被称为衍生物、子类或子类。

  子类继承了父类和其他祖先可访问的字段和方法。然而,他们从不继承结构函数。相反,子类声明其自身的结构函数。此外,他们可以声明自己的领域和方法,以区别于父母。参照例2:

  例2. Acccount父类

  class Account

  {

  private String name;

  private long amount;

  Account(String name, long amount)

  {

  this.name = name;

  setAmount(amount);

  }

  void deposit(long amount)

  {

  this.amount += amount;

  }

  String getName()

  {

  return name;

  }

  long getAmount()

  {

  return amount;

  }

  void setAmount(long amount)

  {

  this.amount = amount;

  }

  }

  例2描述了具有名称和初始金额的通用银行账户类别,它们都设置在构建函数中。此外,它还允许用户存款。(可以通过存入负数来提取,但我们忽略了这种可能性。)请注意,在创建帐户时必须设置帐户名称。

  例三是Savingsacount扩展Account的父类子类。

  例3. Savingsaccount子类扩展Account其父类

  class SavingsAccount extends Account

  {

  SavingsAccount(long amount)

  {

  super("savings", amount);

  }

  }

  的SavingsAccount,因为它不需要额外的声明字段或方法类别是微不足道的。然而,它确实声明了一个构造函数,该构造函数初始化为Account超类中的字段。初始化发生在Account通过Javasuper关键字调用的构造函数中,然后是带括号的参数列表中。

  例4.进一步扩展Account,CheckingAccount类。

  例4. CheckingAccount子类扩展Account其父类

  class CheckingAccount extends Account

  {

  CheckingAccount(long amount)

  {

  super("checking", amount);

  }

  void withdraw(long amount)

  {

  setAmount(getAmount() - amount);

  }

  }

  与Savingsaccount相比,checkingAccount声明withdraw()方法要实质性得多。

  类级结构示例:创建了一个AccountDemo应用程序类,可尝试使用Account级别结构。首先,看看AccountDemo的源代码。

  例5. Accountdemo演示帐户级结构

  class AccountDemo

  {

  public static void main(String[] args)

  {

  SavingsAccount sa = new SavingsAccount(10000);

  System.out.println("account name: " + sa.getName());

  System.out.println("initial amount: " + sa.getAmount());

  sa.deposit(5000);

  System.out.println("new amount after deposit: " + sa.getAmount());

  CheckingAccount ca = new CheckingAccount(20000);

  System.out.println("account name: " + ca.getName());

  System.out.println("initial amount: " + ca.getAmount());

  ca.deposit(6000);

  System.out.println("new amount after deposit: " + ca.getAmount());

  ca.withdraw(3000);

  System.out.println("new amount after withdrawal: " + ca.getAmount());

  }

  }

  main()列表5中的方法首先演示SavingSAccount,然后CheckingAccount。假设Account.java,SavingsAccount.java,CheckingAccount.java,Accountdemo.java源文件是在同一目录中编译下列命令中的所有这些源文件:

  javac AccountDemo.java

  javac *.java

  }

  String getMake()

  {

  return make;

  }

  String getModel()

  {

  return model;

  }

  int getYear()

  {

  return year;

  }

  void print()

  {

  System.out.println("Make: " + make + ", Model: " + model + ", Year: " +

  year);

  }

  }

  我们通过实例介绍了本文。使用Java的extends关键词来自父类派生子类,调用父类的结构函数和方法,覆盖方法等。要彻底掌握extends关键字

上一篇:

Linux vi命令大全

下一篇:

java线程池解析