Java必备基础十二——抽象类

本文介绍了Java中抽象类和抽象方法的概念及其使用。抽象方法是只有方法签名而无实现的方法,常用于实现多态。抽象类是无法实例化的类,它可以包含抽象方法和其他方法,用于提供通用模板。子类继承抽象类并实现抽象方法,从而实现多态性。通过示例展示了如何定义抽象类和子类,并展示了如何在实际应用中使用。
摘要由CSDN通过智能技术生成

了解抽象类之前先喝口多态的酒(点我)

为啥要学习抽象类,因为实现多态有很多方式,内核为继承,而与继承相关的有:

  • 基于继承——普通的子类和父类
  • 基于继承——抽象类
  • 基于继承——接口

一、什么是抽象方法

了解抽象类之前先了解抽象方法

1.定义:

在Java语言中,用abstract关键字修饰的方法为抽象方法。抽象方法必须要被继承,由于一个父类有很多字类,每个子类对父类的同一个抽象方法给出了不同的实现过程,这样就会出现同一个名称、同一种类型的返回值的方法在不同的子类中实现的方法体不同的情况,这正是多态性的体现。

2.格式:

abstract 返回类型 抽象方法名([参数列表]);

例如:

public abstract void study();

3.使用时需要注意的点:

  • 没有方法体
  • 只有方法头
  • 直接以";"结束
  • 父类中定义的抽象方法要在子类中重写,所以不能用private或static修饰
  • 抽象方法必须被继承,abstract不能与final一起使用
  • 子类中重写的构造方法的方法名、返回值、参数类型要与父类的抽象方法完全相同
  • 一个类的构造方法不能声明成抽象的(因为构造方法不能被继承)

二、什么是抽象类

某些类在现实世界中不能找到对应的实例,如车,现实中只有汽车,自行车这些车的子类,而不是车的实例,这样的类为抽象类。

1.格式:

abstract class 抽象类名{}

2.使用时需要注意的点:

  • abstract只能修饰类和方法,不能用来修饰成员变量和局部变量
  • 类中包含抽象方法,则该类必须要定义为抽象类
  • 抽象类不一定要包含抽象方法
  • 抽象类必须要被继承,所以不能用final修饰
  • 抽象类可包含成员变量、方法(普通方法或抽象方法)、构造方法、初始化块、内部类5个部分
  • 抽象类的构造方法不能用于创建实例,主要用于被其子类调用,不能使用new关键字实例化,不能有这样的语句:A a = new A();

3.举例:

求圆形的面积周长和颜色

//先定义一个抽象类

abstract class Shape {
    private String color;//定义颜色

    public abstract double area();//求面积的抽象方法

    public abstract double perimeter();//求周长的抽象方法

    public Shape() {
    }

    public Shape(String color) {
        this.color = color;
    }

    public String getColor() {
        return color;
    }
}

//圆类继承抽象方法形状类

class Circle extends Shape {
    private double r;

    public Circle(String color, double r) {
        super(color); //调用父类的颜色方法
        this.r = r;
    }

    /**
     * @return 抽象方法要被继承
     */
    @Override
    public double area() {
        return 3.14 * r * r;
    }

    /**
     * @return 抽象方法要被继承
     */
    @Override
    public double perimeter() {
        return 2*3.14*r;
    }
}

class Scratch {
    public static void main(String[] args) {
        Circle circle = new Circle("pink",2);
        System.out.println(circle);
        System.out.print(",面积为"+circle.area());
        System.out.print(",颜色为"+circle.getColor());
        System.out.print(",周长为"+circle.perimeter());
    }
}
 

输出结果为:

Circle@29453f44
,面积为12.56,颜色为pink,周长为12.56

由于一个抽象类可能有多个子类,因此抽象类的引用可以在某个时间内指向不同子类的对象,这样抽象类的引用就是一种多形态的引用。这个引用在调用子类中被重写的方法时会根据该引用当前所指向对象类型的不同而调用不同子类中相应的方法,这就是抽象类引起的多态。

4.定义:

抽象类是将多个具体类的共同特征抽象出来的父类,以抽象类作为模板,既能让子类在抽象类的基础上进行扩展和改造,又可以避免子类的随意性。利用抽象类和抽象方法,程序可以更加灵活。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值