Java 抽象类(Abstract)

什么是抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ,如果一个类当中没有包含足够的信息来描绘一个具体的对象,那么这样的类被称为抽象类

也可以这样理解,,我们都知道,一个具体类用变量和方法来描述对象,那么就是说,抽象类则是没有足够的信息(没有足够的方法或者变量)来描述对象。


定义语法格式:

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值