JAVA抽象类

当一个类中没有包含足够的信息以描绘一个具体的对象时,这样的类就是抽象类;“抽象类”是用关键字 abstract 修饰的,抽象类中有一种特殊方法,即用abstract 关键字来修饰的方法,这些方法被称为“抽象方法”。

学习抽象需要我们有继承方面的知识,需要对重写、重载等知识有明确的认识。

一、什么是抽象类

抽象类(Abstract Class)是面向对象编程(OOP)中的一个重要概念,它用于表示一种不能被实例化的类,即不能直接通过new关键字来创建对象。抽象类的主要目的是为子类提供一个公共的接口,强制子类实现某些方法,或者为子类提供通用的实现。 

二、抽象类的使用

抽象类的定义:权限修饰符abstract class 类名 {}

抽象方法的定义:权限修饰符abstract 返回值类型 方法名(参数列表) ;

abstract class Shape {}

abstract void draw();

三、为什么需要用抽象类?

本身类的继承重写、重载等内容已经比较完善,那么抽象类存在的意义是什么呢?

当你想定义一个统一的接口,但又不想立即实现它时。
当你想强制子类实现某些方法时。
当你想在类之间共享一些代码,但又不想让这个类被实例化时。

 示例

// 定义一个抽象类  
abstract class Animal {  
    // 定义一个抽象方法  
    abstract void makeSound();  
  
    // 也可以包含具体实现的方法  
    void eat() {  
        System.out.println("This animal eats food.");  
    }  
}  
  
// 定义一个继承自Animal的子类,并实现makeSound方法  
class Dog extends Animal {  
    // 实现抽象方法  
    @Override  
    void makeSound() {  
        System.out.println("Woof!");  
    }  
}  
  
// 另一个继承自Animal的子类,实现makeSound方法  
class Cat extends Animal {  
    // 实现抽象方法  
    @Override  
    void makeSound() {  
        System.out.println("Meow!");  
    }  
}  
  
// 主类,用于测试  
public class TestAbstractClass {  
    public static void main(String[] args) {  
        Animal myDog = new Dog(); // 向上转型  
        myDog.makeSound(); // 输出: Woof!  
        myDog.eat(); // 输出: This animal eats food.  
  
        Animal myCat = new Cat(); // 向上转型  
        myCat.makeSound(); // 输出: Meow!  
        myCat.eat(); // 输出: This animal eats food.  
    }  
}

在这个例子中,Animal 是一个抽象类,它定义了一个抽象方法 makeSound() 和一个具体实现的方法 eat()。Dog 和 Cat 是两个继承自 Animal 的子类,它们分别实现了 makeSound() 方法,以提供各自的声音。在 main 方法中,我们创建了 Dog 和 Cat 的实例,并通过 Animal 类型的引用来调用它们的方法,展示了多态性。

因为抽象类定义为:

某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。

在这个例子中,Animal是一个抽象类,它定义了一个抽象方法makeSound和一个非抽象方法eat。Dog类继承自Animal并实现了makeSound方法。由于Animal是抽象类,我们不能直接实例化它,但可以通过其实例化子类(如Dog)来使用它。   

四、抽象类的特点                 

抽象类的特点
1.abstract修饰的类叫做抽象类,abstract修饰的方法叫做抽象方法
2.abstract修饰的抽象方法必须在子类当中实现,前提是子类不是抽象类
3.抽象类一定是父类 
4.只有抽象类当中才能有抽象方法,普通类当中不能有抽象方法
5.抽象类当中不一定非要写抽象方法,也可以写普通方法
6.抽象类不能被实例化(不能被被创建对象),只能使用多态
7.final和abstract不能同时使用,final修饰的类不能被继承,final修饰的方法不能被重写
8.abstract修饰的方法不能被static 修饰,static修饰的方法属于类
9.抽象方法不能使用private 访问修饰符修饰
10.抽象类是有构造器的,但是它的构造器不能创建对象,构造器的目的是为了完成一些必要的初始化操作

!!!!注意:abstract关键字不能和private、final、static关键字共存!

注:构造器的作用是构建对象的同时赋初始值,但抽象类的构造器只能进行初始化操作而不能进行创建对象 

 一定要注意这两件事。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值