引出:
当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类
当父类的一些方法不确定时,可以用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来修饰,因为这些关键字和重写是相违背的
需求:
总结: