JAVA 抽象类

抽象类

一、基本介绍

引出:

当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类

当父类的一些方法不确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。

  • 一般来说,抽象类会被继承,由其子类来实现抽象方法
  1. 用abstract 关键字来修饰一个类时,这个类就叫抽象类
    • 访问修饰符 abstract 类名{}
  2. 用abstract 关键字来修饰一个方法时,这个方法就是抽象方法
    • 访问修饰符 abstract 返回值类型 方法名(参数列表);//没有方法体
  3. 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()
  4. 抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多

二、注意事项和使用细节

  1. 抽象类是不能被实例化的

  2. 抽象类不一定要包含抽象方法,也就是说可以没有abstract方法

  3. 一旦类包含了abstract方法,则这个类必须是abstract类

  4. abstract只能修饰类和方法,不能修饰属性和其他的。

    package com.hspedu.abstract_;
    
    public class AbstractDetail01 {
        public static void main(String[] args) {
            //1.抽象类,不能被实例化
            //new A();
            // 'A' is abstract; cannot be instantiated
        }
    }
    
    //抽象类不一定要包含抽象方法,也就是说可以没有abstract方法,还可以实现的方法
    abstract class A{
        public void hi(){
            System.out.println("hi");
        }
    }
    
    
    //一旦包含了abstract方法,该类必须是abstract类
    abstract class B{
        public  abstract void hi();
    }
    
    //abstract 只能修饰方法和类,不能修饰其他
    class C{
    //    public abstract int num1;
    }
    
    
  5. 抽象类可以有任意成员[抽象类本质还是类]

    • 比如:非抽象方法,构造器,静态属性等
  6. 抽象类不能有主体,即:不能实现

  7. 如果一个类继承了抽象类则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。

    package com.hspedu.abstract_;
    
    public class AbstractDetail02 {
        public static void main(String[] args) {
    
        }
    }
    
    abstract class E{
        public abstract void hi();
    }
    
    abstract class F extends E{
    
    }
    
    class G extends F{
        @Override
        public void hi() {
            //所谓实现方法,就是有方法体
            System.out.println("hi~~");
        }
    }
    
    //抽象类的本质还是类,可以有类的任何成员
    abstract class D {
        public int n1 = 10;
        public static String name = "大龙";
    
        public void hi() {
            System.out.println("hi");
        }
    
        public abstract void hello();
    
        public static void ok() {
            System.out.println("OK");
        }
    }
    
  8. 抽象方法不能使用private、final和static来修饰,因为这些关键字和重写是相违背的

三、抽象类最佳实际-模板设计模式

需求:

  1. 有多个类,要完成不同任务的job
  2. 要求统计各自完成的时间
  3. 请编程实现

总结:

  • 把公共的部分抽取出来写成一个方法,然后在把不确定的方法抽象化,放在合适的位置
  • 以上的方法放在一个父类中,子类有需要使用时就经常该父类,然后重写抽象方法,这就是模板设计模式的体现
posted @ 2022-02-18 16:29  DL50  阅读(21)  评论(1编辑  收藏  举报