JAVA 抽象类
抽象类
一、基本介绍
引出:
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类
当父类的一些方法不确定时,可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。
- 一般来说,抽象类会被继承,由其子类来实现抽象方法
- 用abstract 关键字来修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 类名{}
- 用abstract 关键字来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回值类型 方法名(参数列表);
//没有方法体
- 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类()
- 抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多
二、注意事项和使用细节
-
抽象类是不能被实例化的
-
抽象类不一定要包含抽象方法,也就是说可以没有abstract方法
-
一旦类包含了abstract方法,则这个类必须是abstract类
-
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; }
-
抽象类可以有任意成员[抽象类本质还是类]
- 比如:非抽象方法,构造器,静态属性等
-
抽象类不能有主体,即:不能实现
-
如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为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"); } }
-
抽象方法不能使用private、final和static来修饰,因为这些关键字和重写是相违背的
三、抽象类最佳实际-模板设计模式
需求:
- 有多个类,要完成不同任务的job
- 要求统计各自完成的时间
- 请编程实现
总结:
- 把公共的部分抽取出来写成一个方法,然后在把不确定的方法抽象化,放在合适的位置
- 以上的方法放在一个父类中,子类有需要使用时就经常该父类,然后重写抽象方法,这就是模板设计模式的体现