什么是抽象类?
类–用来描述具有共同性质的一组事物的自定义复合数据类型
通过class关键字创建一个java类。
通过abstract 修饰的java类就是抽象类。
格式: 访问修饰符 abstract class 类名{}
public abstract class Hello{ }
二、为什么要使用抽象类?
抽象类的出现体现出java的重构.[重复的动作提取出来]
抽象类是提供可以由子类共享的一般形式,由子类根据自己的实际情况去处理这个一般形式。
例如:坐车收费,出租车有收费功能【1元/公里】,公交车有收费功能【全程1元】
也就是说,一个相同的方法给不同的类实现可以有不同的方法
例子:
/**
-
@author achige
-
@desc 抽象类运用实践
-
@date 2024/8/1523:02
*/
public class AbstractExample {
public static void main(String[] args) {
//各自实现抽象方法
shape circle =new Circle(9.0);
shape rectangle=new Rectangle(6,7);System.out.println("圆的面积计算:"+circle.getArea()); System.out.println("六面体的面积计算:"+rectangle.getArea()); //实现具体方法 circle.display(); rectangle.display();
}
}
abstract class shape {
//定义一个计算面积的抽象方法
abstract double getArea();//抽象类中也可以有具体的方法 void display() { System.out.println("这是一个立方体"); }
}
class Circle extends shape {//继承抽象类,同时继承方法
private double radius;//定义一个参数,进行传参 Circle(double radius){ this.radius=radius; } //给抽象类中的方法赋予完整的实现方式 @Override double getArea(){ return Math.PI*radius*radius; }
}
class Rectangle extends shape{//继承抽象类,同时继承方法
//定义长宽
private int width;
private int length;Rectangle(int width,int length){//给抽象类中的方法赋予完整的实现方式
this.width=width;
this.length=length;
}
//使用被重写的抽象类方法
@Override
double getArea(){
return length*width;}
}
抽象的概念是由具体概念依其“共性”而产生的,把具体概念的诸多个性排出,集中描述其共性,就会产生一个抽象性的概念。抽象思维,是人类思维达到高级阶段产生的一种能力,例如,当小孩子思维尚未成熟时,他们只能掌握具体概念,他们在学习代词“你、我、他”时往往遇到困难,因为代词具有较高的抽象性。
总之,抽象概念的外延大,内涵小;具体概念的外延小,内涵大。
(1)普通类可以去实例化调用;抽象类不能被实例化,因为它是存在于一种概念而不非具体。
(2)普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非自类也是抽象类。
抽象类的优点:
- 代码复用:
抽象类可以包含具体的实现代码,这些代码在子类中可以被复用,从而避免了代码的重复编写。例如,一个抽象类可以定义一些通用的方法,这些方法对于所有子类都是相同的,而子类只需要实现那些特定于自己的方法。 - 建立规范:
抽象类可以被视为一种模板或框架,为子类提供了一套必须遵守的规范。这有助于在大型项目中保持代码的一致性和可维护性。通过定义抽象方法,强制子类实现这些方法,从而确保所有子类都遵循统一的接口或行为模式。 - 强制实现:
当一个类继承了一个抽象类,它必须实现抽象类中定义的所有抽象方法(除非它自己也声明为抽象类)。这种机制确保了子类不会遗漏实现必要的功能,从而提高了代码的健壮性和可靠性。 - 支持多态:
抽象类及其子类可以参与多态的实现。通过引用抽象类型的变量来引用子类的对象,可以在运行时动态地决定具体调用哪个子类的方法,从而增加了程序的灵活性和可扩展性。 - 安全性:
由于抽象类不能被实例化,这在一定程度上增加了代码的安全性。可以防止程序员错误地创建抽象类的实例,从而避免了潜在的错误和异常