java抽象类

一、什么是抽象类

1.1抽象类的概念

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

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

1.2抽象类的作用

1.代码复用
抽象类可以包含一些通用的方法实现,这些方法可以被子类直接继承和使用,避免了代码重复。
2.强制规范
强制子类实现某些特定的方法。由于抽象类中存在抽象方法,子类必须实现这些方法,否则子类也必须被声明为抽象类。这确保了在不同的实现场景下,都有统一的接口和行为规范。
3.易于维护和扩展
当需要对一组相关类进行修改或扩展时,只需要在抽象类中进行修改,所有的子类都会自动继承这些修改。

 二、抽象类定义

注意:抽象类的存在是为了被继承

 2.1关键字abstract
public abstract class  Test {
}

 我们要用abstract关键字来定义抽象类和方法。

2.2 抽象类与普通类的区别

1.抽象方法可以没有具体实现,它的存在是为了规范子类的方法,因为子类必须重写这个方法,来实现对应子类的方法。 

 

抽象方法是没有方法体的方法。它的存在是为了定义一种行为规范,让子类去具体实现这种行为。如果一个非抽象类中包含抽象方法,那么当尝试创建该类的对象时,由于无法确定如何执行抽象方法,就会导致错误。

 

 2.抽象类无法被实例化

 

 

由上的介绍可知,抽象类是为了子类的规范而存在的,而且无法被实例化,所以抽象类无法被final修饰,方法也不可以被private修饰符修饰

 final修饰词修饰抽象类报错:

 

 

 private词修饰方法报错:

 

 三、简单的抽象类代码运用

3.1课上例子:

定义两个类ChineseAirConditioner(Z国空调)和AmericanAirConditioner(M国空调),执行下面代码:

public class Main {

    public static void main(String[] args) {

        System.out.println("***测试中国空调***");

        ChineseAirConditioner conditioner1 = new ChineseAirConditioner();

        conditioner1.startUp();

        conditioner1.displayStatus();

        conditioner1.shutDown();

        conditioner1.displayStatus();

  

     System.out.println("***测试美国空调***");

        AmericanAirConditioner conditioner2 = new AmericanAirConditioner();

        conditioner2.startUp();

        conditioner2.displayStatus();

        conditioner2.shutDown();

        conditioner2.displayStatus();

    }

}

可产生如下输出:

***测试中国空调***

空调状态: 开启

空调状态: 关闭

***测试美国空调***

Air Conditioner Status: ON

Air Conditioner Status: OFF

我们可以先通过引入一个公共超类简化类定义中的重复代码,再简化main中的代码

首先定义一个公共超类:

public class Conditioner {
 // 处理完全相同的代码=>定义公共超类
 protected boolean isOn = false;
 // protected: 本包和子类可以访问
 public void startUp() {
 isOn = true;
 }
 public void shutDown() {
 isOn = false;
 }
}

随后简化main代码:

public class Main {
 private static void test(Conditioner conditioner) {
 conditioner.startUp();
 conditioner.displayStatus();
 conditioner.shutDown();
 conditioner.displayStatus();
 // 不在Conditioner中写displayStatus的话
 // 无法调用displayStatus,也就无法发挥多态和动态绑定的威力
 }
 public static void main(String[] args) {
 System.out.println("***测试中国空调***");
 test(new ChineseAirConditioner());
 System.out.println("***测试美国空调***");
 test(new AmericanAirConditioner());
 }
}

即可产生最后输出:

***测试中国空调***
空调状态: 开启
空调状态: 关闭
***测试美国空调***
Air Conditioner Status: ON
Air Conditioner Status: OFF
3.2总结

抽象类是Java中实现代码复用的强大工具。通过在父类中定义抽象方法和具体实现,我们可以在不增加代码冗余的情况下,使代码更加灵活和可维护。掌握抽象类的使用方法和特性,是编写高效和可扩展Java代码的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值