面向对象抽象类的理解

本文详细介绍了Java中的抽象类和抽象方法。抽象类无法实例化,但可包含成员变量、方法(包括普通方法和构造方法)。抽象方法只有方法签名,没有方法体。一个类含有抽象方法则必须声明为抽象类,子类继承抽象类必须实现所有抽象方法,除非自身也是抽象类。示例代码展示了如何定义和使用抽象类及其子类。
摘要由CSDN通过智能技术生成

面向对象中所有的对象,都可以用类描述,但并不是所有的类都只能用来描述对象,若:一个类的信息不够时,它就属于“抽象类”。

那抽象类中究竟有哪些信息,或者又缺失哪些信息呢?

1、相同:成员变量/属性,方法(普通方法、构造方法),和访问方式与普通类并无特殊

2、不同:抽象类不能实例化对象。必须被继承。一个类只能继承一个抽象,可以有多个接口。

如果一个类包含有特别的方法,这个方法只能让继承他的子类实现,便可以在父类中声明“Abstract”,(这个类是抽象类)。

抽象方法,只包含方法名,不包含方法体(没有这东西),没有定义,方法名后边直接跟一个“()”,而不是“{}”。

如果类中有抽象方法,那这个类必然是抽象类,且子类必须重写父类的抽象方法,或声明自身是抽象类,最终,必须有子类实现抽象方法,否则将不能实例化对象。(只有抽象类的非抽象子类可以创建对象)

static修饰的方法,不能被定义成抽象方法;

下面用代码做个演示:

public abstract class Animal {    //父类

    int age;

    public abstract void rest();      //抽象方法,只包含方法名,不包含方法体(没有这东西),没有定义,方法名后边直接跟一个“()”,而不是“{}”
    public abstract void run();

    public void shout(){
        System.out.println("Animal.shout");    //普通/成员方法
        System.out.println("一个抽象类中的父类普通方法");
    }

}


class Dog extends Animal{

    @Override
    public void rest() {
        System.out.println("Dog.rest");     //且子类必须重写父类的抽象方法,并!实现
    }

    @Override
    public void run() {
        System.out.println("Dog.run");     //且子类必须重写父类的抽象方法,并!实现
    }
}

class Cat extends Animal{

    @Override
    public void rest() {
        System.out.println("Cat.rest");     //且子类必须重写父类的抽象方法,并!实现
    }

    @Override
    public void run() {
        System.out.println("Cat.run");     //且子类必须重写父类的抽象方法,并!实现
    }
}
/**
 * 抽象类不能实例化,非抽象子类可以创建对象。属性、方法只能被子类调用。
 */

class TestAbstractAnimal{
    public static void main(String[] args) {
        Cat c=new Cat();    //(只有抽象类的非抽象子类可以创建对象)
        c.shout();         //抽象类内的信息,只能被子类调用
        c.run();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值