抽象类和接口(1)

抽象类

抽象类的概念

在面向对象中对象是通过类来描述,但不是所有的类都是来描述对象的,今天我们学习的类它主要是被继承的,那么什么类是主要被继承的?如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。比如:

Animal类它是所有动物的总称里面包含eat()成员方法,但是它不是一个具体的动物,不可以描述一个具体的对象

 但是Animal类是可以被继承的,比如Dog具有Animal的eat()行为所以可以继承Animal。

 说明:

1.Animal是动物类,每个动物都有吃的方法,但由于Animal不是一个具体的动物,因此其内部eat()方法无法具体实现。

2.Dog是狗类,首先狗是动物,并且具有Animal中的eat()行为,因此与Animal是继承关系,其次狗是一种具体的动物,狗吃:狗吃饭,其eat()可以实现

3.Cat是猫类,首先猫是动物,并且具有Animal中的eat()行为,因此与Animal是继承关系,其次猫是一种具体的动物,猫吃:猫吃饭,其eat()可以实现

抽象类的语法

在Java中用abstract修饰的类是抽象类,用abstract修饰的方法是抽象方法。抽象方法不能给出具体的实现(如果给出具体实现会报错)。

 抽象类的特性

1.被abstract修饰的类称为抽象类

2.被abstract修饰的方法称为抽象方法

3.抽象类中也可以有普通成员变量、普通成员方法、构造方法

 4.final,static修饰的方法不能被重写,而抽象方法的作用就是被重写的,所以final,static不能修饰抽象方法

5.private不能修饰抽象方法

7.抽象类不能被实例化

8.抽象类在被继承时一定要重写抽象类中的抽象方法,不然会报错

 重写之后

 9.在一个B类继承一个抽象类A后,B类不想重写A类的抽象方法,这是我们可以把B类加一个abstract修饰,那么这时B类就变成抽象类并且也不用写A类的抽象方法,但是如果有一个C类来继承B类那么此时需要写A和B两个抽象类的抽象方法

10.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

11.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

12.当一个类中含有抽象方法的时候,该类必须使用abstract修饰

13.抽象类既然不能被实例化那么要它有什们用呢?

       就是我前面说的被继承,然后子类重写抽象类的方法,完成子类自己的行为

抽象类的作用

抽象类本身是不能被实例化的,那么要想使用,就要创建抽象类的子类,然后让子类重写抽象类中的抽象方法。

普通类也是可以被继承的,那为什么要写抽象类呢?

那是因为抽象类被继承时一定要重写抽象类的抽象方法,这就相当与多一重编译器的校验。

使用抽象类的场景就如上面的代码,实际工作不应该由父类完成,而应该由子类完成,那么此时如果不小心误用成父类了,使用普通类编译器是不会报错的,但是父类是抽象类就会在实例化的时候提示错误,让我们尽早发现问题。(这里不应该由父类完成,而应该由子类完成,就是向上转型,然后调用子类重写父类的,重写方法)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值