java抽象类

本文介绍了抽象类和抽象方法的概念,强调它们在面向对象编程中的作用。抽象类用于描述对象的共同特征,但不提供具体实现,不能被实例化。抽象方法没有方法体,必须在子类中实现。子类继承抽象类时,必须重写所有抽象方法,除非子类自身也是抽象类。示例展示了如何定义和使用抽象类及其子类。
摘要由CSDN通过智能技术生成

什么是抽象类

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

什么是抽象方法

抽象方法的格式

//用abstract修饰 没有方法体
//抽象方法必须为 public 或者 protected(因为如果为 private,则不能被子类继承,子类便无法实现该方法),默认情况下默认为 public。
//如果一个方法里面含有抽象方法,那么这个类必须是抽象类, 反之抽象类中不一定有抽象方法.
public abstract void show();

抽象类的注意事项

  • 抽象类不能实例化,因为抽象类里面有抽象方法,如果抽象类能够实例化,通过对象.抽象方法来调用是没有意义的,抽象方法是没有方法体的.

  • 抽象类不一定有抽象方法,有抽象方法的类一定是抽象类,抽象类中可以存在普通方法

  • 抽象类一定有构造方法, 因为抽象类中会有成员变量,而抽象类一般是要被子类继承的,子类创建对象的时候需要调用父类构造器初始化父类的成员变量.

  • 抽象类的子类必须要重写抽象父类的全部抽象方法, 除非该子类也是一个抽象方法.

abstract关键字的冲突问题

  • final: 被abstract修饰的类强制要求被重写, 而被final修饰的类是不能被重写的.
  • private: 被abstract修饰的类强制要求被重写, 而被private修饰的类不能重写
  • static: static修饰的方法可以已类名.方法直接调用,抽象类.方法是没有意义的.

案例:

//动物类(抽象父类)
public abstract class Animal {

    //抽象方法
    public abstract void eat();

    public void drink(){
        System.out.println("喝水");
    }
}

//定义猫类
public class Cat extends Animal{

    @Override
    public void eat() {
        System.out.println("吃鱼");
    }
}

//狗类 
public class Dog extends Animal {


    @Override
    public void eat() {
        System.out.println("吃肉");
    }

}


//测试类
public class Demo1 {

    public static void main(String[] args) {
       
        Cat cat = new Cat();
        cat.drink();
        cat.eat();
        
        Dog dog = new Dog();
        dog.drink();
        dog.eat();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值