添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在 Java 中,如果一个类里需要定义一个没有具体实现的方法,它的实现需要它的子类中实现,那么可以使用 abstract 定义成一个 抽象方法

像下面这样:

// 格式:abstract 返回类型 方法名(参数列表);
abstract void sleep();

如果一个类里包含至少一个抽象方法,那么类只能使用 abstract 关键词定义成抽象类

像下面这样:

public abstract class AbsPerson { //抽象类
    public int age = 22;
    public void eat(){
      System.out.println("吃饭");
   public abstract void sleep();

抽象类中还可以包含其他的非抽象方法以及字段。抽象类的子类必须实现其所有的抽象方法,否则子类也必须声明为抽象类。但是抽象类中也可以不定义任何抽象方法。

继承抽象类

抽象类可以被继承,一个类如果继承了抽象类,则必须实现抽象类中的抽象方法

* @author www.wdbyte.com public class Student extends AbsPerson { // 不实现抽象方法 sleep() 会编译不过。 @Override public void sleep() { System.out.println("学生上课不能睡觉");

抽象类不能实例化

抽象类不能实例化,不然编译不通过。

public static void main(String[] args) {
       new AbsPerson();
  // java: com.wdbyte.oop.abs.AbsPerson是抽象的; 无法实例化

抽象类的子类作为普通类可以实例化,抽象类可以指向子类。

AbsPerson absPerson = new Student();
System.out.println(absPerson.age); // 22
absPerson.eat(); // 吃饭
absPerson.sleep(); // 学生上课不能睡觉

继承抽象类可以实现多态

package com.wdbyte.oop.abs;
 * @author www.wdbyte.com
public class Teacher extends AbsPerson {
    @Override
    public void sleep() {
        System.out.println("老师教课时不能睡觉");

测试 StudentTeacher .

* @author www.wdbyte.com public class PersonTest { public static void main(String[] args) { Student student = new Student(); Teacher teacher = new Teacher(); sleep(student); // 学生上课不能睡觉 sleep(teacher); // 老师教课时不能睡觉 public static void sleep(AbsPerson person) { person.sleep();

抽象类总结

Java 抽象类有以下特点:

  • 一个类包含抽象方法则必须定义成抽象类,但是抽象类可以不包含任何抽象方法。
  • 抽象类可以包含非抽象方法、属性。
  • 子类继承抽象类必须实现抽象类中的所有抽象方法,否则子类也必须声明为抽象类。
  • 抽象类不能直接实例化:抽象类只能被子类实现实例化。
  • 抽象类可以向上转型:抽象类的引用可以指向子类对象,实现了抽象类的多态性。
  • 抽象类的主要作用是为其子类提供通用的属性和方法,这些属性和方法由其子类实现,从而实现了代码复用和逻辑分离。

    一如既往,文章中代码存放在 Github.com/niumoo/javaNotes.