抽象类和接口

抽象类和接口

一、抽象类

在java中,当一个类的方法被abstract关键字修饰时,该方法称为抽象方法。抽象方法所在的类必须定义为抽象类。
当一个方法被定义为抽象方法后,意味着该方法不会有具体的实现,而是在抽象类的子类中通过方法重写进行实现。

定义抽象方法的语法格式:
[访问修饰符]abstract<返回类型><方法名>([参数列表]);

​抽象类没有具体的实例,不能被实例化。但是可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例。抽象类不能是最终类。因为抽象类是用来被继承的,而最终类是无法被继承的,互相就矛盾了。

①抽象类的作用:

​1.抽象类定义了一种父类型,用来被继承。而子类可抽象可不抽象,不抽象的子类可以new实例化。

​2.抽象类中的抽象方法没有无需写方法体,而通过子类来实现这个方法,能够减少一些代码量。

②抽象方法:

​ 类中有些方法没有实现代码,也不能有实现代码,这样的方法可以定义为抽象方法。Java中抽象方法用abstract修饰方法名。

​ 语法:
​ abstract 返回值类型 方法名(参数列表);

​ 抽象方法需要注意以下几点:

​ 1.抽象方法没有方法体(没有{})

​ 2.抽象方法必须在抽象类里

​ 3.抽象方法必须在子类中被实现,除非子类是抽象类

​ ③抽象类和抽象方法之间的关系:

​ 1.一个类中只要有一个抽象方法,这个类就必须是抽象类

​ 2.一个抽象类里不一定要有抽象方法

​ 3.抽象方法必须被非抽象的子类实现(通过重写),否则子类依然必须是抽象类

​ 4.没有抽象的构造方法,也没有抽象静态方法

​ 5.抽象类中可以有非抽象的构造方法,创建子类的实例时可以调用。

二、接口

java中接口的作用和生活中的接口类似,它提供一种约定,使得实现接口的类(或结构)在形式上保持一致。
接口是一个不能实例化的类型,接口类型的定义类似于类的定义。

1.语法格式:
public interface 接口名{
接口成员
}
和抽象类不同,定义接口使用interface 修饰符,访问修饰符只能是public ,前面不写访问修饰符也是默认是public 和abstract的。

2.定义接口需要注意的是:
①接口中只能包含抽象方法和静态常量,不能有属性变量

②接口中所有成员都必须是public的,不写默认是public

③接口中静态常量不写static和final也默认是static和final

④接口中抽象方法不写abstract和public也默认有abstract和public,不能有方法体(包括大括号)

3.接口具有以下特性:
①接口不可以被实例化

②实现类必须实现接口的所有方法,除非这个类也是抽象类

③实现类可以实现多个接口( implements),多个接口使用逗号隔开

④接口中的变量都是静态常量(public static final),必须显式初始化

⑤接口中所有方法都是抽象的

⑥接口中所有成员都必须是public 的

⑦接口可以被多重实现或继承,接口可以继承接口,但接口不能实现另一个接口,只能通过实现类去实现

⑧接口没有构造方法

三、抽象类与接口的对比
在这里插入图片描述
相同点:

1、代表系统的抽象层

2、都不能被实例化

3、都能包含抽象方法(用于描述系统提供的服务,不必提供具体实现)

不同点:

1、在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法(抽象类便于复用,接口便于代码维护)

2、一个类只能继承一个直接的父类,但可以实现多个接口

3、已存在的继承树,可以方便的抽取接口,但是抽取抽象类不容易

4、使用原则不同
①接口做系统与外界交互的窗口(接口提供服务)
②接口本身一旦制定,就不允许随意修改
③抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点

四、面向对象设计原则
1、多用组合,少用继承
2、针对接口编程
3、针对扩展开放,针对改变关闭(改变原有代码容易对其他关联代码带来未知bug,通常采取扩展新功能,而不去修改原有代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值