为什么会有抽象类?
示例
定义一个Animal类作为父类,父类中有一个run方法
package work0826;
public class Animal {
public void run(){
System.out.println("都会跑");
}
}
package work0826;
public class Pig extends Animal{
public void run(){
System.out.println("猪都会跑");
}
}
package work0826;
public class Dog extends Animal{
public void run(){
System.out.println("狗都会跑");
}
}
package work0826;
public class Cat extends Animal{
public void run(){
System.out.println("猫都会跑");
}
}
我们定义了Dog Cat Pig子类,由于run方法并不适用于子类,所以每个子类都重写了父类当中的run方法
通过本实例,我们就会产生一个疑惑:
我们知道,继承的本质是代码的复用,子类继承父类的方法:
如果子类的方法都会各自实现与父类不同的功能,那么子类中的方法都需要重写,那么是不是不需要创建父类,不需要继承?
答案是否定的,因为多态是父类的引用指向子类的对象。继承能够使用多态,使用多态能够更好的表达java代码
既想要继承又不想重写方法,因此引出抽象类
抽象类
一般情况下,抽象类是父类
抽象类当中可以定义抽象方法,抽象方法必须在子类当中重写并实现
抽象方法只定义,不实现,从而满足了定义父类当中的方法,又可以使用多态的需求
package work0826;
public abstract class Animal {
public abstract void run();//只定义,不能实现
}
抽象类的定义方式
abstract class Animal {
abstract void makeSound(); // 抽象方法
void eat() { // 具体方法
System.out.println("This animal eats food.");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
抽象类是什么
抽象类的特点
抽象类的方法
1.abstract修饰的类叫做抽象类,abstract修饰的方法叫做抽象方法
2.abstract修饰的抽象方法必须在子类当中重写并实现,前提是子类不是抽象类
如果子类Dog类是抽象类
3.abstract修饰的抽象类一定是父类,因为需要子类对其实现抽象方法
4.只有抽象类当中有抽象方法,普通类当中不能有抽象方法
5.抽象类当中不一定非要写抽象方法,也可以写普通方法
抽象类的实例化
6.抽象类不能被实例化(创建对象),只能使用多态
抽象类&final修饰符
7.final和abstract不能同时使用
final修饰的类不能被继承,final修饰的方法不能被重写,abstract修饰的类必须要有子类继承,进行方法的重写。
抽象类&static修饰符
8.abstract修饰的方法(抽象方法)不能被static修饰
static修饰的方法属于类,而abstarct修饰的方法属于对象。
抽象类&private修饰符
9.抽象方法不能使用private访问修饰符,进行修饰
private修饰符修饰的变量和方法只能在本类当中使用,但是abstract修饰的方法必须在子类当中重写并实现
抽象类的构造器
10.抽象类是由构造器的,但是它的构造器不能创建对象,其构造器的目的是为了完成一些必要的初始化操作
总结
抽象类是面向对象编程中强大的工具,使用抽象类可以有效地组织代码、实现代码复用,并通过多态提高程序的灵活性和可维护性。通过掌握抽象类的特点与用法,开发者可以设计出更加清晰和高效的程序结构。
欢迎大家点赞,收藏,评论加关注呦