HelloCoder HelloCoder
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
随笔
关于作者
首页
《Java小白求职之路》
《小白学Java》
计算机毕设
  • 一些免费计算机资源
  • 脚手架工具
  • 《从0到1学习Java多线程》
  • 《从0到1搭建服务器》
随笔
关于作者
  • 《PureJavaCoderRoad》

    • 导读

    • Java基础

      • Java入门

      • Java语法

      • Java流程控制

      • 面向对象

        • 1、方法
        • 2、静态字段和静态方法
        • 3、继承
        • 4、重载和重写
        • 5、多态
        • 6、抽象类
        • 7、接口
        • 8、值传递和引用传递
        • 9、枚举
        • Head-Java对象的理解
      • 异常处理

    • Java进阶

    • Java高阶

    • 开发辅助工具

    • 计算机网络

    • 数据库

    • JavaEE

    • 中间件

    • 架构

    • 建议

  • PureJavaCoderRoad
  • Java基础
  • 面向对象
#抽象类
码农阿雨
2022-05-26
目录

6、抽象类

在面向对象中,所有的对象都是通过类来实例化出来的。

但是并不是所有的类,都可以用来实例化一个对象的。

这就是 抽像类。

# 抽象类

语法:

abstract class{
    private String name; //可以有自己的普通变量
    default void testAmethod() {//可以有自己的普通方法
    }
	abstract method(); //抽象方法一定是 ; 结尾,没有{}方法体
    
}

abstract 关键字表示抽象类

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

既然是抽象类,它描述的内容都是抽象的,而对象是具体的,自然而然就无法实例化了。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用,这就是抽象类的意义,在上一个例子中:

public class Car {
     void drive() {
        System.out.println("平平无奇地开车");
    }
}

class WuLingHongGuang extends Car {
    @Override
    void drive() {
        System.out.println("我在开五菱宏光");
    }
}

基本上不会使用

Car car = new Car();
car.drive();  //平平无奇地开车

这种方法去使用Car类。

那我就无须写这个方法了:

 void drive() {
    System.out.println("平平无奇地开车");
}

反正也没什么类要调用。

哈C我在考驾照前,根本不懂车是怎么开的, 驾校的车是台桑塔纳,教练和我说开车要先系安全带、然启动、拉手刹,巴拉巴拉一大堆,最后才能开车。

public class Car {
    void drive() {
        System.out.println("系安全带");
        System.out.println("启动");
        System.out.println("拉手刹");
        //TODO
        System.out.println("平平无奇地开车");
    }
}

我暴富的那一天,我买回来的宝马,它没有拉杆手刹,因为它有电子档位,我也不需要盯着后视镜倒车,因为它有自动泊车功能。

这和教练说的不太一样,他说的太具体了,我的宝马不是这样的,教练欺骗了我.....

我现在只需要它是可以 开(drive()) 就可以了,剩下的步骤我自己研究我的宝马就可以了~

我们可以使用抽象类来处理Car:

public abstract class Car {
    abstract void drive();
}

class BaoMa extends Car {
    @Override
    void drive() {
        System.out.println("系安全带");
        System.out.println("启动");
        System.out.println("我在开宝马");
    }
}
class Test{
    public static void main(String[] args) {
//        Car car = new  Car(); //不能实例化,会报错
        BaoMa baoMa = new BaoMa();
        baoMa.drive();
    }
}

这样 抽象类只需要告诉子类定义的方法,你只需要按照我的方法去重写就可以了,具体实现什么功能、怎么做,留给子类自己实现。

# 总结

抽象类特点:

  1. 抽象类是抽象的,不是具体的,所以抽象类不能被实例化。但是它仍然具有类的功能,成员变量、成员方法和构造方法的访问方式和普通类一样,也可以实现接口、继承类。

  2. 由于抽象类不能实例化对象,所以抽象类必须被继承,除非该子类也是抽象类。(不然抽象就没意思了)。所以,类的声明、方法体 就不能使用final去修饰,final表示不可继承和修改,但是变量可以使用final修饰。(static 表示常量,final 表示不可改变,而抽象方法是一定要被重写的)

  3. 如果一个类包含抽象方法,那么该类必须是抽象类。(但是抽象类可以有非抽象方法)。

  4. 抽象类中的抽象方法的访问类型可以是public,protected、默认类型。

  5. 构造方法不能声明为抽象方法。

eg:

public abstract class Employee extends Person implements People{
{
	public final String a ="1";
    
    static {
        System.out.println("我是抽象类的static代码块");
    }

    public static void test(){
        System.out.println("我是抽象类的static方法");
    }

    public abstract void abstrartMethod();

    public void abstrartMethod2() {
        System.out.println("抽象类也可以拥有非抽象方法");
    }
}
阅读全文
×

(为防止恶意爬虫)
扫码或搜索:HelloCoder
发送:290992
即可永久解锁本站全部文章

解锁
#抽象类
上次更新: 2025-02-21 06:04:57
最近更新
01
《LeetCode 101》
02-21
02
IDEA、Golang、Pycharm破解安装
02-21
03
《LeetCode CookBook》
02-21
更多文章>
Theme by Vdoing | Copyright © 2020-2025 码农阿雨
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式