Java抽象类和接口

1.抽象类

基本概念:
1.抽象思维,是人类思维达到高级阶段产生的一种能力
2.抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。
3.对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

基本语法:

访问修饰符 abstract class ClassName { }

抽象类和普通类的区别
1.抽象类要用abstract修饰。
2.普通类可以实例化,抽象类不能实例化
3.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方 法,则必须将子类也定义为为abstract类。

(1) 抽象方法

抽象类与抽象方法的使用:

抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类。
如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类。
没有抽象构造方法,也没有抽象静态方法 。
抽象类中可以有非抽象的构造方法,创建子类的实例时可以调用。

2. 接口

在软件中,接口同样是一种规范或标准,它们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。

定义接口的语法:
[访问修饰符] interface 接口名 extends 父接口1,父接口2,…{
//常量定义
//方法定义
}

类实现接口的语法:
[访问修饰符] class 类名 extends 父类名 implements 接口1,接口2,…{
//类成员
}

(1)接口的特性

1.接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见。
2.接口中可以定义常量,不能定义变量。接口中的属性都会自动用public static final 修饰,即接口中的属性都是全局静态常量。
3.接口中方法自动用public abstract修饰,接口中所有方法都是抽象方法。 接口不能实例化,接口中不能有构造方法。
4.接口直接可以通过extends实现继承关系,一个接口可以继承多个接口,但是接口不能继承类
5. 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。

如下USB接口实例:

//编写接口
public interface UsbInterface {
           void service();
}
//实现接口
public class UDisk implements UsbInterface {
    public void service() {
        System.out.println("连接USB口,开始传输数据。");
    }
}
//使用接口
UsbInterface uDisk = new UDisk();
uDisk.service();

(2)接口表示一种能力

接口这个概念比较抽象下面使用一个木匠的例子举例:

“做这项工作需要一个木匠”
木匠并不是指某一个人,而代表一种能力,招聘木匠就是招聘具备该能力的人

所以接口表示一种能力
体现在接口的方法上,一个类实现了某个接口,就表示这个类具备了某种能力

(3)接口表示一种约定

生活中,我们使用的两相电源插座,规定了:
1.两个接头间的额定电压
2.两个接头间的距离
3.接头的形状

	注意:接口表示一种约定,有些接口只有名称

(4)应用场景

制定墨盒、纸张的约定或标准,其他厂商按照墨盒、纸张的标准生产墨盒、纸张。然后打印机厂商按照约定对墨盒、纸张开发打印机,无论最后使用的是哪个厂商提供的墨盒或纸张,只要符合统一的约定,打印机都可以打印。

定义墨盒接口InkBox
定义纸张接口Paper

实现墨盒接口
实现纸张接口

定义打印机类

3.面向接口编程

在这里插入图片描述
面向接口编程就是先把客户的业务逻辑线提取出来,作为接口,业务具体实现通过该接口的实现类来完成。当客户需求变化时,只需编写该业务逻辑的新的实现类,替换该接口的实现类就可以完成需求,不需要改写现有代码,减少对系统的影响。

(1)面向接口编程的优点

1.降低代码间的耦合性
2.易于程序的扩展,提高了程序的可扩性性
3.提高了程序的可维护性

(1)接口体现了约定和实现相分离的原则
(2)面向接口编程就意味着:开发系统时,主体架构使用接口,接口构成系统的骨架,这样就可以通过更换实现接口的类来实现更换需求。

4.注意:面试题

抽象类和接口的联系和区别?

相同点:

代表系统的抽象层
都不能被实例化
都能包含抽象方法:用于描述系统提供的服务,不必提供具体实现

#不同点:

在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
抽象类便于复用,接口便于代码维护
一个类只能继承一个直接的父类,但可以实现多个接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方片6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值