父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了(因为子类对象会调用自己重写的方法)。换句话说,父类可能知道子类应该有哪个功能,但是功能具体怎么实现父类是不清楚的(由子类自己决定),父类只需要提供一个没有方法体的定义即可,具体实现交给子类自己去实现。我们把没有方法体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。
- 抽象方法 : 没有方法体的方法。
- 抽象类:包含抽象方法的类。
1. 抽象类的定义
抽象类是一个不能直接实例化的类,它为其他类提供了一种通用的结构。通过抽象类,开发者可以定义一些方法的框架,而具体的实现则交给子类。
语法
abstract class ClassName {
// 抽象方法(没有方法体)
public abstract void abstractMethod();
// 普通方法(可以有方法体)
public void normalMethod() {
System.out.println("This is a normal method.");
}
}
- abstract:用于定义抽象类或抽象方法。
- 抽象类:包含抽象方法和具体方法(已实现的方法)。
- 抽象方法:声明没有方法体的函数,表示该方法在子类中必须被实现。
2. 抽象类的特点
如果一个类包含抽象方法,那么该类必须是抽象类。注意:抽象类不一定有抽象方法,但是有抽象方法的类必须定义成抽象类。
abstract class 类名字 {
}
public abstract class Animal {
public abstract void run();
}
3. 抽象方法
抽象方法是没有方法体的,只有方法签名。子类必须实现所有的抽象方法,除非子类是抽象类。
抽象方法的定义:
abstract void myMethod();
子类实现抽象方法:
class ConcreteClass extends AbstractClass {
@Override
void myMethod() {
System.out.println("Implemented myMethod in the subclass");
}
}
3 抽象类的使用
要求:继承抽象类的子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。
// 父类,抽象类
abstract class Employee {
private String id;
private String name;
private double salary;
public Employee() {
}
public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
// 抽象方法
// 抽象方法必须要放在抽象类中
abstract public void work();
}
// 定义一个子类继承抽象类
class Manager extends Employee {
public Manager() {
}
public Manager(String id, String name, double salary) {
super(id, name, salary);
}
// 2.重写父类的抽象方法
@Override
public void work() {
System.out.println("管理其他人");
}
}
// 定义一个子类继承抽象类
class Cook extends Employee {
public Cook() {
}
public Cook(String id, String name, double salary) {
super(id, name, salary);
}
@Override
public void work() {
System.out.println("厨师炒菜多加点盐...");
}
}
// 测试类
public class Demo10 {
public static void main(String[] args) {
// 创建抽象类,抽象类不能创建对象
// 假设抽象类让我们创建对象,里面的抽象方法没有方法体,无法执行.所以不让我们创建对象
// Employee e = new Employee();
// e.work();
// 3.创建子类
Manager m = new Manager();
m.work();
Cook c = new Cook("ap002", "库克", 1);
c.work();
}
}
此时的方法重写,是子类对父类抽象方法的完成实现,我们将这种方法重写的操作,也叫做实现方法。
抽象类存在的意义
抽象类存在的意义是为了被子类继承,否则抽象类将毫无意义。抽象类可以强制让子类,一定要按照规定的格式进行重写。
标签:java,子类,抽象,抽象类,父类,方法,public From: https://blog.csdn.net/qq_48763502/article/details/145193443