关键字:abstract

  • 从形式上看抽象类是 由 abstract 修饰的 Java 类

  • 专门为继承体系顶端设计的类通常设计为抽象类

  • 抽象类 不能被实例化

    • 不能通过 new 关键字直接创建抽象类的类型的实例

    • 但是可以创建其子类的实例

  • 抽象类中 可以有 字段方法构造方法代码块内部类

特点:

1、抽象类 可以继承 抽象类 具体类可以继承抽象类 抽象类可以继承 具体类 2、抽象方法是 由 abstract 修饰的、没有方法体 的方法 3、有抽象方法的类必须是抽象类

4、如果 具体类 继承了 抽象类,则 必须实现抽象类中的所有方法

  • 如果某个方法在声明时无法确定其实现细节,则可以省略其实现过程,直接以分号结束

  • 如果某个方法省略了实现过程连 { } 都省略了 此时需要为该方法 增加关键字 abstract 表示该方法时抽象的

  • 抽象方法就是 由 abstract 修饰的 没有方法体的方法

含有抽象方法的类必须就是抽象类

但是有抽象类不一定有抽象方法

Human 类

  1.  package abstractclass;
     
     import java.util.Objects;
     
     /** 1、抽象类 与 具体类 的区别是 抽象类不可以实例化
      * 2、抽象类 不一定要有抽象方法 为了让某个类不能被实例化也可以将该类设计为 抽象类
      *
      * */
     
     public abstract class Human extends Object { // 抽象类 可以继承实体类
         protected String name;
     
         static {
             System.out.println("Human:类初始化块");
        }
        {
             System.out.println("Human:实例初始化块");
        }
     
         public Human() {
             System.out.println("Human()");
        }
         public Human(String name) {
             this.name = name;
             System.out.println("Human(String)");
        }
         public void show() {
             System.out.println(this.name);
        }
     
         public static void main(String[] args) {
             Human h = null;
             // h = new Human(); // 【错误】 Human 类是抽象的 无法实例化
        }
     }
     

 

Sinaean 类 有一个抽象方法 eat

  1.  package abstractclass;
     
     
     /**
      * 1、抽象类 可以继承 抽象类 具体类可以继承抽象类 抽象类可以继承 具体类
      * 2、抽象方法是 由 abstract 修饰的、没有方法体 的方法
      * 3、有抽象方法的类必须是抽象类
      * */
     
     public abstract class Sinaean extends Human {
         // 声明一个抽象方法
         public abstract void eat(String foodName); // 没有方法体、由 abstract 修饰符修饰
     
     }
     

Han 类

  1.  package abstractclass;
     /**
      * 1、如果 具体类 继承了 抽象类,则 必须实现抽象类中的所有方法
      *
      *
      * */
     public class Han extends Sinaean {
     
     
         @Override
         public void eat(String foodName) { // 如果有方法体就一定不能有 abstract 修饰符
             System.out.println("在中国汉族人基本都使用筷子吃" + foodName );
        }
     
         public static void main(String[] args) {
             Han h = new Han();
             h.name = "火锅";
             h.eat("火锅");
        }
     }
     

 

版权声明:本文为zachyoung原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zachyoung/p/12960360.html