21xrx.com
2024-12-23 00:40:12 Monday
登录
文章检索 我的文章 写文章
Java中abstract的用法:理解抽象类和抽象方法
2023-06-18 08:44:39 深夜i     --     --
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");

  }

}

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复