一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
java类分为具体类和抽象类。什么是抽象类呢?就是只定义了行为没有描述此行为的具体特征的类。java中用abstract关键字表示抽象。abstract可以修饰类和方法。
一、抽象方法
- 抽象方法只有声明,没有方法体。
- 子类继承父类时,必须实现父类的所有抽象方法;因此在使用 abstract 关键字修饰抽象方法时不能使用 private 修饰,因为抽象方法必须被子类重写,若使用 private 声明后,子类无法进行重写。
- 抽象类中可以有非抽象方法,但是具体类中不能用抽象方法。
- 抽象方法也不能用static修饰,因为static修饰的方法可以直接通过类名调用,而抽象方法没有方法体,更不存在任何的业务逻辑,所以无意义。
二、抽象类
- 抽象类是用abstract关键字修饰的类,其形式为:public abstract class 类名{}。
- 抽象类不能被实例化,换言之我们没法直接 new 出一个抽象类。只能有通过子类继承抽象父类后才能进行实例化。虽然抽象类不能被实例化,但它有自己的构造方法。
- 抽象类不同于接口,接口中不能有实例方法去实现业务逻辑,而抽象类中可以有实例方法。
- 抽象类不能使用final关键字修饰;因为抽象类需要通过继承去实现其抽象方法,而final修饰的类无法被继承。 代码示例:
/**
* 抽象类
*/
public abstract class Animal {
private String name;
/**
* 抽象方法,没有{},以";"结尾
*/
abstract void say();
/**
* 抽象类中可以有实例方法
*/
public void setName(String name) {
this.name = name;
}
}
---------------子类-------------
public class Dog extends Animal{
/**
* 子类必须实现父类所有的抽象方法
*/
@Override
void say() {
System.out.println("汪汪汪!!");
}
}