21xrx.com
2025-07-16 04:16:00 Wednesday
文章检索 我的文章 写文章
Java中abstract的用法:理解抽象类和抽象方法
2023-06-18 08:44:39 深夜i     16     0
Java abstract 抽象类 抽象方法 继承 实现 案例分析

在Java中,abstract是一个关键字,用于定义抽象类和抽象方法。抽象类是不能被实例化的类,只能作为父类被继承,而抽象方法只有声明,没有具体实现。在本文中,我们将详细介绍Java中abstract的用法,包括抽象类和抽象方法的定义、使用方法和实际案例。

定义抽象类和抽象方法

在Java中,抽象类和抽象方法都必须使用abstract关键字来修饰。抽象类是不能被实例化的,它提供了一些共性的属性和方法,以便子类对其进行扩展和实现。通过使用abstract关键字修饰方法,我们可以声明一个方法,但不给出具体实现,从而强制子类去实现它。

下面是一个抽象类和一个抽象方法的定义示例:

public abstract class Animal {
  String name;
  public Animal(String name)
    this.name = name;
  
  public abstract void eat();
}

使用抽象类和抽象方法

使用抽象类和抽象方法有两种方式:继承和实现,具体细节如下:

1.继承抽象类:如果一个类继承了抽象类,那么它必须实现父类中的所有抽象方法,否则该类也必须声明为抽象类。

public class Cat extends Animal {
  public Cat(String name) {
    super(name);
  }
  @Override
  public void eat() {
    System.out.println(name + " is eating fish");
  }
}

2.实现抽象方法:如果一个类实现了某个接口,并且该接口中含有某个抽象方法,那么该类必须实现该抽象方法。

public interface Runner {
  public abstract void run();
}
public class Dog implements Runner {
  String name;
  public Dog(String name)
    this.name = name;
  
  @Override
  public void run() {
    System.out.println(name + " is running");
  }
}

实际案例

现在,我们来看一个实际案例,这个案例将展示如何使用抽象类和抽象方法。假设我们正在制作一个游戏,游戏中有许多角色。我们把这些角色分为普通角色和BOSS角色,普通角色可以移动和攻击,而BOSS角色可以飞行和发射炮弹。

我们可以创建一个抽象类Role,同时定义两个抽象方法move和attack。然后,普通角色类NormalRole和BOSS角色类BossRole都继承了Role类,并实现了它的抽象方法move和attack。但是,BOSS角色类还需要实现新增的抽象方法fly和shootBullet。

public abstract class Role {
  String name;
  public Role(String name)
    this.name = name;
  
  public abstract void move();
  public abstract void attack();
}
public class NormalRole extends Role {
  public NormalRole(String name) {
    super(name);
  }
  @Override
  public void move() {
    System.out.println(name + " is moving");
  }
  @Override
  public void attack() {
    System.out.println(name + " is attacking");
  }
}
public class BossRole extends Role {
  public BossRole(String name) {
    super(name);
  }
  @Override
  public void move() {
    System.out.println(name + " is moving");
  }
  @Override
  public void attack() {
    System.out.println(name + " is attacking");
  }
  public void fly() {
    System.out.println(name + " is flying");
  }
  public void shootBullet() {
    System.out.println(name + " is shooting bullet");
  }
}

以上就是一个简单的使用抽象类和抽象方法的实际案例。

  
  

评论区