java基础20---abstract

抽象即不清楚的,如抽象画一样
在java中抽象用abstract关键字来表达抽象。举个例子:
动物都会叫,但是没有具体怎么叫,对于不同的动物有不同的叫法,如猫叫喵,狗叫汪,羊叫咩,牛叫哞等等。我们就可以把动物叫表达为抽象
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述
抽象方法:

1)从上面的例子中我们可以看出,抽象方法没有主体(speak()没有{}包起来的业务逻辑),所以我们没法直接调用抽象方法
2)抽象方法不能用private修饰,因为抽象方法只能有子类去复写,而private的权限对于子类来说是不能访问的,所以就会产生矛盾
3)抽象方法也不能用static修饰,如果用了static修饰,父类可以直接调用抽象方法,可是抽象方法没有主体,没有任何业务逻辑,这样就毫无意义

抽象方法没有主体测试
在抽象方法中加上{},报错
报错信息为:Abstract methods do not specify a body
在这里插入图片描述

抽象类:

1)用abstract关键字来表达的类,其表达形式为:(public)abstract class 类名{}
2)抽象类不能被实例化,即没法直接new一个抽象类。抽象类本身就代表了一个类型,无法确定为一个具体的对象,所以不能实例化就合乎情理了,只能由它的继承类实例化
3)抽象类虽然不能被实例化,但是可以有自己的构造方法
4)抽象类不能用final关键字修饰,因为final修饰的类无法被继承,而对于抽象类来说就是需要通过继承去实现抽象方法,这又会产生矛盾
5)抽象类与接口(interface)有很大的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类中可以有实例方法,并实现业务逻辑

抽象类不能被实例化测试
在这里插入图片描述
报错信息为Cannot instantiate the type Animal

抽象类可以有自己的构造方法
在这里插入图片描述
从结果来看,和普通的继承类一样,在new 一个子类对象时会优先调用父类(这里指的是抽象类
Animal)的构造器初始化,然后再调用子类的构造器。

抽象类的好处

1、由于抽象类不能被实例化,最大的好处就是通过方法的覆盖来实现多态的属性。也就是运行期绑定
2、抽象类将事物的共性的东西提取出来,由子类继承去实现,代码易扩展、易维护。

抽象类与抽象方法的关联

如果一个类中至少有一个抽象方法,那么这个类一定是抽象类,但反之则不然。也就是说一个抽象类中可以没有抽象方法。这样做的目的是为了此类不能被实例化

如果一个类继承了抽象类,必须全部复写抽象类中的全部抽象方法,如果没有全部复写,这个子类也必须是抽象类(这样做就无意义了)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值