面向对象通识17(abstract修饰符)

abstract(抽象)

特性

该修饰符只能修饰方法和类

abstractfinal是互斥的

原因:

  • 对于类:前者修饰的类必须派生子类,后者修饰的类禁止派生子类
  • 对于方法:前者修饰的方法必须要被重写,后者修饰的方法禁止被重写

抽象类

特征

有得有失——

有得:抽象类可拥有抽象方法(普通类有的,抽象类都有)

有失:抽象类失去了创建对象的功能

抽象类的主要作用——派生子类(子类构造器一定要调用父类构造器一次,因此抽象类必须有构造器)

作用

  1. 定义变量
  2. 调用类方法和类变量
  3. 派生子类(主要目的)

抽象方法

只有方法签名,没有方法体(花括号{})的方法,{}的存在代表方法体的存在,单独存在代表空的方法体

再次强调,只有抽象类才能有抽象方法,普通类不能有抽象方法

所以,抽象方法必须要交由子类进行调用才能实现

抽象类派生子类

  • 要么子类重写父类中所有的抽象方法,要么子类也只能是抽象的
    此为“非抽象类不能调用抽象方法”这一规则的推论

举例:

  1. public abstract class animal {
  2. public static void main(String[] args) {
  3. System.out.println("2333");
  4. }
  5. //抽象法方法
  6. public abstract void a1();
  7. public static void info(){
  8. System.out.println("23233");
  9. }
  10. }
  11. public class birds extends animal {
  12. @Override//父类的抽象方法必须重写
  13. public void a1() {
  14. System.out.println("43343");
  15. }
  16. }
  1. public class AnimalTest {
  2. public static void main(String[] args) {
  3. animal.info();
  4. animal s1=new birds();
  5. s1.a1();
  6. }
  7. }
  8. /*
  9. 23233
  10. 43343
  11. */