【JAVA基础】抽象类


引言

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

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

​ 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

​ 父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

​ 在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象类 抽象方法

继承的本质是代码的复用,子类可以对父类方法进行重写,当我们子类很多,并且都需要在子类中重写同一个方法,我们其实就不需要在父类中实现这个方法。

在这里插入图片描述

但是这样父类看起来好像就没有必要定义,此时我们可以创建抽象类

  • 定义:abstract修饰的类叫做抽象类,abstract修饰的方法叫做**抽象方法**

    总体来说就是:

    • 抽象类:包含抽象方法的类
    • 抽象方法:没有方法主体的方法
  • 使用格式

    abstract class 类名{
        修饰符 abstract 返回值类型 方法名(参数列表);
    }
    
  • 特点:

    1. abstract修饰的抽象方法不需要再抽象类中实现,但是必须在子类中重写并实现(子类如果不是抽象类)否则就会报错,如图:

      在这里插入图片描述

    2. 抽象类一定是父类

    3. 只有抽象类中才能有抽象方法,普通类中不可以有抽象方法

    4. 抽象类中不一定写抽象方法,也可以写普通方法

    5. 抽象类无法被实例化(被new对象),只能使用多态

    6. final和abstract不可以同时使用

    7. abstract修饰的方法不可以被static关键字修饰,因为static修饰的方法属于类方法,abstract修饰的方法属于对象

    8. 抽象方法不可以使用private访问修饰符进行修饰

    9. 抽象类中有构造器,但是抽象类的构造器无法创建对象,其构造器的目的是为了完成必要的初始化操作

举个例子

// 抽象类(父类)
public abstract class Animals {
    private String name;

    public Animals(String name){ // 此构造器只能用于初始化值
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract void run();// 抽象方法不可以被实现,会报错
//        {System.out.println("动物都会跑");}// 不需要再实现方法
    public void fly(){
        System.out.println("会飞");
    }
}

// 子类
public class Pig extends Animals{
    public Pig(String name){
        super(name);
    }

    @Override
    public void run() {
        System.out.println("猪会跑");
    }
}

// 子类
public class Cat extends Animals{
    public Cat(String name){
        super(name);
    }

    @Override
    public void run() {
        System.out.println("猫会跑");
    }
}

// 测试类
public class Test {
    public static void main(String[] args) {
        Animals animals = new Animals() // 报错 无法实例化
        Animals a = new Pig("小猪");
        Animals b = new Cat("小猫");
        a.run();
        System.out.println(a.getName());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值