抽象类

public class Hello {
    public static void main(String[] args) {
        Person  p = new Student();
        p.run();//Student is running
        Person.run2();
        p.run1();
    }
}
  
// 抽象类中可以存在实例方法,静态方法,实例字段,他可以存在已经实现的方法然后被子类继承
// 他的抽象方法有点像是接口中的未实现方法,相当于一个约定,约定了他的子类必须实现抽象类中的抽象方法
// 抽象类和接口的不同之处在于一个类可以实现多个接口,但是抽象类只能是单继承的
// 抽象类中可以有实例成员,静态成员,子类继承他会拥有这些成员,但是接口不存在实例成员和静态成员
// 接口只是一个约定而已
abstract class Person {
      public abstract void run();
      public String name;
      public void run1() {
          System.out.println("run1");
      }      
      public static void run2() {
          System.out.println("run2");
      }
}

class Student extends Person{
      public void run() {
          System.out.println("Student is running");
      }
}
 

类中只要有抽象放啊(abstract)方法就类也就是抽象方法,这个类也必须是抽象类。抽象类不可以被实例化。

抽象类会强迫子类去实现父类(抽象类)中的方法,因此,抽象方法实际上相当于定义了“规范”。

这种尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。

面向抽象编程的本质就是:

  • 上层代码只定义规范(例如:abstract class Person);

  • 不需要子类就可以实现业务逻辑(正常编译);

  • 具体的业务逻辑由不同的子类实现,调用者并不关心。

原文地址:https://www.cnblogs.com/-alvin/p/12971751.html