什么是抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ,如果一个类当中没有包含足够的信息来描绘一个具体的对象,那么这样的类被称为抽象类。
也可以这样理解,,我们都知道,一个具体类用变量和方法来描述对象,那么就是说,抽象类则是没有足够的信息(没有足够的方法或者变量)来描述对象。
定义语法格式:
在Java当中,抽象类的语法格式如下:
class<class_name> {
<method_name>(parameter-iist);
}
语法格式名字 | 内容含义 |
---|---|
abstract | 该关键字表示该类或者方法是抽象的 |
class_name | 抽象类的名称 |
parameter-list | 方法参数列表 |
如果一个方法hi用abstract来修饰,则说明该方法是抽象方法,抽象方法只有申明,没有实现。需要注意的是abstract关键字只能用于普通方法,b不可以用于static方法或者构造方法中。
抽象方法的三个特征如下:
- 1.抽象方法没有方法体。(也就是暗示定义中没有足够的信息来描述对象)
- 2.抽象方法必须存在于抽象类当中。
- 3.子类重写父类时,必须重写父类的所有抽象方法。
注意事项:
在使用abstract关键字修饰抽象方法时不可以使用private修饰,因为抽象方法必须被子类重写,而一旦被private关键字修饰,私有化,不能从类外部访问该方法,所以子类是无法重写的。
抽象类的定义和使用规则
- 1.抽象类和抽象方法d都要使用abstract关键字申明
- 2.如果一个方法被申明为抽象方法,那么这个类必须是抽象类,只有在抽象类当中才可以定义抽象方法,但是抽象类当中也可以有任意个抽象方法和任意具体方法。
- 3.抽象类不可以实例化,也就是说不可以使用new关键字创建对象。
代码举例:
首先我们定义一个抽象Shape类,并且在该类内部定义一个求面积的抽象方法area,还有俩个属性width和height。
public abstract class Shape {
public int height;
public int width;
public Shape(int width, int height) {
this.width = width;
this.height = height;
}
// 定义抽象方法,计算面积
public abstract double area();
}
再定义一个正方形类,继承Shape类,而且必须要重写抽象方法。
public class Square extends Shape {
public Square(int width, int height) {
super(width, height);
}
// 重写父类中的抽象方法,实现计算正方形面积的功能
@Override
public double area() {
return width * height;
}
}
再此定义一个三角形类,与正方形类相同,继承Shape类之后必须要重写抽象方法。
public class Triangle extends Shape {
public Triangle(int width, int height) {
super(width, height);
}
// 重写父类中的抽象方法,实现计算三角形面积的功能
@Override
public double area() {
return 0.5 * width * height;
}
}
最后再实例化一个具体对象进行测试
public class ShapeTest {
public static void main(String[] args) {
Square square = new Square(5, 4); // 创建正方形类对象
System.out.println("正方形的面积为:" + square.area());
Triangle triangle = new Triangle(2, 5); // 创建三角形类对象
System.out.println("三角形的面积为:" + triangle.area());
}
}
运行结果如下:
正方形的面积为:20.0
三角形的面积为:5.0
代码理解:
通过上面的例子,我们知道在Shape抽象类当中有一个area抽象方法,里面啥都没写,信息不足,只是知道这个方法是用来求面积的,但是在子类当中却重新写了area方法,并且写了如何求得面积的过程。在继承的过程中,抽象类比具体类更加的灵活。
https://blog.csdn.net/qq_38329988/article/details/80855124