1、abstract修饰符
abstract是Java中的一个修饰符,表示“抽象的”,只能用来修饰类和方法,不能修饰属性。如果用来修饰类,表示该类是一个抽象类;如果用来修饰方法,表示该方法是一个抽象方法。
但是我们要注意,并不是所有的类和方法,都可以用abstract来修饰。其中,private私有的、static静态的、final方法和final类,都不能用abstract来修饰!因为这些修饰符,不需要被继承下来重写
2、抽象类
abstract关键词表示该类是抽象的,介于接口和类之间
1)、抽象类不能被实例化,即不能创建抽象类的对象,一般是由子类进行实例化完成相关操作,声明抽象类的目的主要是为了对该类进行扩展;
抽象类中可以有N个抽象方法,也可以有N个非抽象方法,抽象方法并不是必须的;
2)、抽象类中可以没有抽象方法,但如果一个方法是抽象方法,其所在的类必须是抽象类,否则编译阶段就报错;
3)、由于抽象类不能实例化对象,所以抽象类必须被继承后才能被使用;
4)、如果一个类继承了抽象类,该类要么重写抽象类中的所有抽象方法,要么自己也抽象化;
5)、一个类不能同时被abstract和 final 修饰,因为抽象类需要被子类继承,而final类不能被继承。
public interface Animal {
void eat();
void sleep();
}
@Slf4j
public abstract class AbstractAnimal {
/**
* @return void
* @Author 吹老师
* @Description //定义一个抽象方法
* @Date 00:13 2024/2/4
* @Param []
**/
abstract void sports();
/**
* @return void
* @Author 吹老师
* @Description //定义一个非抽象方法
* @Date 00:13 2024/2/4
* @Param []
**/
void eat(){
log.info("我在吃饭");
}
}
3、 抽象方法
3.1、 简介
抽象方法是一种没有任何实现的方法,该方法的具体实现由子类来完成。抽象方法由abstract修饰,不能和final、static、private共同使用。如果一个类包含了若干个抽象方法,那么该类必须声明为抽象类,但抽象类中可以不包含抽象方法。
3.2、 语法
我们定义抽象方法的基本语法格式如下所示:
抽象方法不能是private私有的,因为抽象方法必须由子类重写实现。abstract关键词表示该方法是抽象的,method_name是抽象方法的名称,抽象方法的声明以分号结尾。
3.3. 特性
抽象方法具有如下几个特性:
抽象方法由abstract修饰,不能和final、static、private关键词共同使用;
抽象方法只有方法的声明,但没有方法体;
抽象方法必须存在于抽象类中;
子类继承父类时,必须重写父类中所有的抽象方法,除非自己也是抽象类;
4. 结语
至此,我们就把abstract修饰符相关的内容给大家介绍完毕了,最后我们梳理一下本文的关键点:
抽象类和抽象方法都要使用abstract关键字声明;
抽象类不能被实例化,不能使用 new关键字创建对象,抽象类的非抽象子类可以创建对象;
抽象类中不一定包含抽象方法,但有抽象方法的类必须是抽象类;
一个抽象类中可以有0~n个抽象方法,也可以有0~n个具体方法;
抽象类中的抽象方法只是声明,不包含具体实现;
私有、静态方法、final方法不能声明为抽象方法;
抽象类的子类必须实现抽象方法,除非该子类也是抽象类;
面向抽象编程使得调用者只须关心抽象方法的定义,而不必关心子类的具体实现。