Java抽象类

目录

什么是抽象类

为什么使用抽象类

抽象类的特点

抽象类的定义

抽象方法

抽象类作为父类

抽象方法的限制

非抽象方法的存在

实例化限制

final

static

private

抽象类的构造器

结论


什么是抽象类

在Java中,抽象类(Abstract Class)是一种无法直接实例化的类,通常用于被其他类继承。抽象类可以包含抽象方法(没有方法体,只有方法签名,并用abstract关键字声明)和非抽象方法(普通方法,有方法实现)。如果一个类包含至少一个抽象方法,那么这个类必须被声明为抽象类。不过,即便一个抽象类没有包含任何抽象方法,它仍然可以被声明为抽象类,以限制其不能被直接实例化。

为什么使用抽象类

抽象类的设计初衷是为了实现代码的复用和灵活性。在面向对象编程中,继承允许子类从父类继承方法和属性。然而,在某些情况下,父类的方法可能并不适用于所有子类。例如,假设有多个子类需要各自实现不同的逻辑,这时在父类中提供具体的实现就显得不够灵活。通过使用抽象类,我们可以在父类中定义抽象方法,而不提供具体实现,留给子类去定义自己的实现方式。这样做不仅实现了代码的复用,还避免了不必要的代码冗余。

抽象类允许我们在父类中定义通用接口(方法),并在子类中提供具体实现。这种方式不仅提高了代码的灵活性和可扩展性,还支持多态的实现,使得代码更加简洁和易于维护。

抽象类的特点

抽象类的定义

使用abstract关键字修饰的类就是抽象类。例如:

public abstract class A {}
抽象方法

abstract关键字修饰的方法不需要在抽象类中实现,必须在具体的子类中重写和实现,除非子类也是抽象类。例如:

public abstract class A {

    public abstract void run();

}



public class B extends A {

    @Override

    public void run() {

        System.out.println("B会跑");

    }

}
抽象类作为父类

抽象类通常作为父类,提供公共方法的定义和抽象方法的声明,供子类继承和实现。

抽象方法的限制

只有抽象类才能包含抽象方法。普通类中不能有抽象方法,否则会引发编译错误。

非抽象方法的存在

抽象类可以包含非抽象方法(即普通方法),这些方法可以有具体的实现,用于子类的共用逻辑。例如:

abstract class Animal {

    abstract void makeSound();

   

    void run() {

        System.out.println("跑步");

    }

}
实例化限制

抽象类不能直接实例化,不能使用new关键字创建对象。只能通过其子类的实例化来实现多态行为。如果子类也是抽象类,那么它也不能被实例化。例如:

abstract class Animal {

    abstract void makeSound();

}



abstract class Dog extends Animal {

    abstract void wagTail();

}



class GoldenRetriever extends Dog {

    @Override

    void makeSound() {

        System.out.println("Woof!");

    }



    @Override

    void wagTail() {

        System.out.println("Wagging tail...");

    }

}



// 正确的实例化方式

GoldenRetriever dog = new GoldenRetriever();

dog.makeSound();

dog.wagTail();
final

关键字的限制:abstract和final不能同时使用,因为final类不能被继承,而abstract类必须被继承。此外,final方法也不能被重写,这与抽象方法的目的相违背。

static

关键字的限制:抽象方法不能用static修饰,因为static方法属于类而非实例,而抽象方法必须在对象的上下文中被实现。

private

关键字的限制:抽象方法不能使用private修饰符,因为private方法只能在类内部使用,而抽象方法需要在子类中被重写。

抽象类的构造器

尽管抽象类不能被直接实例化,但它们可以拥有构造器。抽象类的构造器通常用于初始化抽象类的字段,为子类的构造器提供基础。

结论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值