博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象类于接口
阅读量:5242 次
发布时间:2019-06-14

本文共 1596 字,大约阅读时间需要 5 分钟。

                                        抽象类于接口

              前面我们介绍了继承,子类继承父类 的非私有成员,在java中还可以创建专门的类座位父类,这种类被称为抽象类,抽象类有点像模板,他只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法,比如一个图形类应该有一个求周长的方法,但是不同的图形求周长的算法不一样。那该怎么办呢

于是我们有了抽象类的定义

抽象类定义的格式:

abstract class 类名 {

}

//研发部员工 abstract class Developer {    public abstract void work();//抽象函数。需要abstract修饰,并分号;结束}//JavaEE工程师class JavaEE extends Developer{    public void work() {        System.out.println("正在研发淘宝网站");    }}//Android工程师class Android extends Developer {    public void work() {        System.out.println("正在研发淘宝手机客户端软件");    }}

这就是一个抽象类,有两个子类继承了她

 抽象类的特点:

1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。

2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。

3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。

之所以继承抽象类,更多的是在思想,是面对共性类型操作会更简单。

 

抽象类就先说这么多,接下来我们看一下接口

                                                             接口

    可以把接口看作是抽象类的一个分支,接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。

与定义类的class不同,接口定义时需要使用interface关键字。并且一个接口可以继承多个父类

 

interface Fu1{    void show();}interface Fu2{    void show1();}interface Fu3{    void show2();}interface Zi extends Fu1,Fu2,Fu3{    void show3();}

 

这里可以使用extends关键字

class Fu {    public void show(){}}interface Inter {    pulbic abstract void show1();}class Zi extends Fu implements Inter {    public void show1() {    }}

这里继承一个接口,所以要用关键字implements,并且父类也是接口类型

好了,我们来具体看一下抽象类和接口的区别

相同点:

1都位于继承的顶端,用于被其他类实现或继承;

2都不能直接实例化对象;

3都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

1抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;

2一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

3抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系

4接口是这个事物中的额外内容,继承体系是一种 like..a关系

 

二者的选用:

优先选用接口,尽量少用抽象类;

2需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;

好了,接口和抽象类就介绍到这里

 

转载于:https://www.cnblogs.com/jingyukeng/p/8687390.html

你可能感兴趣的文章
如何解决click事件的重复触发问题
查看>>
2016寒假自学笔记
查看>>
VC++2012编程演练数据结构《21》二叉排序树
查看>>
Easyui NumberBox格式化展示
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
(描述需要改进) Leetcode No.71 **
查看>>
socket初识
查看>>
绕啊绕的递归函数
查看>>
vue+sass 下sass不能运行问题
查看>>
struts 的应用
查看>>
磁盘测试工具
查看>>
eclipse查看jdk及maven依赖包源码
查看>>
[HDU]3371 Connect the Cities
查看>>
那些年我们刷过的手机
查看>>
python--数据类型--1
查看>>
简单计算器
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
阿里云容器镜像加速器配置
查看>>
Problem B: 占点游戏
查看>>