Java(八)——面向对象(4)-抽象类与接口

一、抽象类(abstract)

如果一个class定义了方法,但没有具体执行代码,这个方法就是抽象方法,抽象方法用abstract修饰。

因为无法执行抽象方法,因此这个类也必须申明为抽象类

  • 使用abstract修饰的类就是抽象类。我们无法实例化一个抽象类
  • 抽象类定义了抽象方法,那么,在继承它的子类,就必须覆写run()方法
  • 抽象类中只定义规范,没有具体逻辑,具体的业务逻辑由不同的子类实现
  • 抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法
public class Main {
    public static void main(String[] args) {
        Person p = new Student();
        p.run();
    }
}

// Person为抽象类,只是规定了规范
abstract class Person {
    // 抽象方法,没有函数体,不会执行,只是一个规范,子类必须对其进行重写
    public abstract void run();
}

class Student extends Person {
    
    // 继承抽象类,必须重写其抽象方法
    @Override
    public void run() {
        System.out.println("Student.run");
    }
}

二、接口(interface)

接口是一个特殊的抽象类。接口的所有方法全部都是抽象方法,没有方法体

1、接口使用interface修饰,使用implements来调用接口
2、接口不能被实例化
3、一个类只能继承一个类,但是可以实现多个接口
4、接口中方法均为抽象方法;接口中可以有变量,但是要被初始化,用  public final   修饰
5、接口中不能包含实例域或静态方法(静态方法必须实现,接口中方法是抽象方法,不能实现)
6、一个接口不能继承其它的类,但是可以继承别的接口
interface Person{
    // 在接口中 public final 和 public abstract 可以省略
    
    // 接口中的变量必须定用final修饰,即常量
    (public final) int a = 1;
    String b = "aaa";      // 变量一旦赋值就不可更改,为final修饰,final可以省略
    
   (public abstract) void setName();
    
}

public class Student implements Person{
    public void setName(){
       ...
    }
}
  • 一个interface可以继承自另一个interface
interface Hello {
    void hello();
}

interface Person extends Hello {
    void run();
    String getName();
}
原文地址:https://www.cnblogs.com/linagcheng/p/12166785.html