Java面向对象:abstract关键字

Java - abstract修饰符

abstract修饰符

  • 抽象:程序中不能被new创建的? 父类,抽象,不完整,不具体,不能独立存在。通过 abstract 修饰类,意为抽象类,不能new对象。

  • abstract:抽象的,似是而非,像却又不是,具备某种对象的特征,但不完整

  • abstract修饰类概念:不够完整,不够具体,不能独立存在

  • 语法:abstract class 类名 { }

  • abstract修饰类:

    • 抽象类,不能直接独立new对象;

    • 可被子类继承,提供共性属性和方法;

    • 可声明为引用,强制使用多态(更纯粹的多态);

    • 抽象类的构造方法作用:构建子类对象时,先构建父类对象,(父类共性 + 子类独有 = 完整子类对象)

  • 经验:abstract修饰后的抽象父类,依附于子类对象存在。

  • abstract修饰方法概念:抽象方法,不够完整、不够具体

  • 语法:访问权限修饰符 abstract 返回值类型 函数名([参数列表]);

  • abstract修饰方法:

    • 只有方法声明,没有方法实现;

    • 必须包含在抽象类中(abstract class XX{});

    • 强制子类必须实现该方法,提供完整的、具体的调用版本;

  • 总结:

    • 子类继承抽象类,子类必须覆盖父类中所有的抽象方法,否则子类还是抽象类;

    • 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类。

public class TestAbstract {
      public static void main(String[] args) {
            //new OneAnimal();  // 不能直接独立存在

            new NewDog(); // 构建子类对象,先构建父类对象(父类共性 + 子类独有 = 完整子类对象)

            OneAnimal a = new NewDog(); // 更纯粹的多态。

            a.eat();
      }
}
abstract class OneAnimal { // abstract修饰为抽象类,不能直接new对象(不够完整,不够具体,不改独立存在)
      String breed;
      int age;
      String sex;

      public OneAnimal() {
            System.out.println("OneAnimal()");
      }

      // 抽象方法(abstract修饰,只有方法声明,没有方法实现。必须包含在抽象类中,意为不够完整、不够具体)
      // 强制子类必须实现该方法,提供完整的、具体的调用版本。
      public abstract void eat();

      // 普通方法
      public void sleep() {
            System.out.println();
      }
}
class NewDog extends OneAnimal {

      public NewDog() {
            System.out.println("Dog()");
      }
      @Override
      public void eat() {
            System.out.println("狗在吃骨头...");
      }
}

你可能感兴趣的:(Java面向对象:abstract关键字)