记:抽象类的作用

2 篇文章 0 订阅

记:
继续今天面试的有趣问题。Java语言。

抽象类

抽象类和抽象方法都必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。

抽象类和抽象方法的规则如下:

  • 抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。
  • 抽象类不能被实例化,无法使用new关键字来调用抽象类的构造器创建抽象类的实例。
  • 抽象类可以包含Field、方法(普通方法和抽象方法都可以)、构造器、初始化块 、内部类、枚举类6种成分。
  • 含有抽象方法的类只能被定义为抽象类。

啊,突然想起来我们还有一种叫Interface接口的东西啊,感觉很类似。

Interface接口

区别在哪?
- 接口里只能包含抽象方法,抽象类可以包含普通方法;
- 接口里不能定义静态方法,抽象类可以定义静态方法;
- 接口里只能定义静态常量Field,不能定义普通Field(public,final, static),抽象类没限制;
- 接口不能包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其之类调用这些构造器来完成属于抽象类初始化操作。
- 接口里不能包含初始化块;但抽象类则完全可以包含初始化块。
- 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承的不足。

那么问题来了,抽象类究竟在代码里面扮演什么角色?

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
接口有点不一样,体现的更是一种规范性的东西。
我们在编码的过程中,往往喜欢使用这样的结构 (I - A - C)
抽象类作为了第二层结构被使用。

根据面向对象的特性,我们举个例子:
首先,我们有一个白色的门Door(Class),它有open()、close()的方法。
那如果说把它规范起来,我们就需要抽象一下,那么可以用接口或者抽象类把它抽象。
那现在呢,我这个白色的门加上一个防盗系统,防盗门。那它就是一个白色的防盗门了。多了一个alarm()的方法。我们在定义的时候,就需要在抽象的接口或者抽象类中加上alarm()的方法。
这看上去貌似没有太大的问题。

但是,我们要知道,这是一个门?还是一个防盗器?
如果这个白色的防盗门需要继承的话,则要把这两个东西都继承下去?但是,如果继承抽象类,只能继承一个。那怎么看待这个问题呢?

我们可以这样理解,它是一个白色的门,是一个门,提供了报警的服务。所以我们在对物体进行抽象的时候,我们确定它是一个门,继承门的抽象类。提供了一种服务,所以说它也服从了某种”规范”,叫做报警的服务接口。

这就是对于abstract和Interface的选择。

往往在开发中,抽象类作为对物体的抽象,继承多个interface,并且规定interface中,哪些方法满足该物体表现特征,再由具体的实现类去继承抽象类,说明我是这样一个东西,然后再来增加属于自己的field和自己的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值