java 抽象与接口_java抽象类和接口

本文详细介绍了Java中的抽象类和接口。抽象类用于表示高层概念,不能实例化,可包含抽象方法供子类实现。接口则是一种约定,定义了一组抽象方法,实现接口的类必须实现接口的所有方法。接口提供了多继承的能力,而抽象类支持单一继承。抽象类与接口各有适用场景,如需多继承或强调约定时,可选择接口;若需共享代码或定义默认实现,则使用抽象类。
摘要由CSDN通过智能技术生成

一.抽象类

(1)定义

抽象,就是不够具体

在人脑中,很多的概念其实也是抽象的,例如动物,水果

使用了关键词abstract声明的类叫作“抽象类”。

(2)语法体现

abstract - 抽象的

可以修饰类也可以修饰方法

1 抽象类不能创建实例,一般用来做为父类,封装子类共有一些属性和方法

2 抽象的父类中经常定义一些抽象方法,用来给子类写重写覆盖,这样子类可以体现不同的实现细节,子类必须重写父类中抽象的方法

除非该子类也是抽象类

abstract classAnimal{privateString name;private intage;public abstract voidsleep();public voidsetName(String name){this.name =name;

}publicString getName(){returnname;

}public void setAge(intage){this.age =age;

}public intgetAge(){returnage;

}

}

(3)更多的语法限制

1 abstract不能与final连用:abstract目的是让人家继承的,final:目的是不让人家继承的

2 abstract不能与static连用:abstract修饰的方法是不用实现的抽象方法。static修饰的方法要实现的类方法

3 如果一个类有一个抽象方法,该类就必须定义成抽象类

4 子类继承抽象的父类,必须重写父类中的所有抽象方法,除非这个子类也是抽象类

5 抽象的子类继承抽象父类,那么可以重写父类中的部分抽象方法,或者不重写

6 抽象类可以继承一个非抽象类

7 抽象类里可以没有抽象方法

(4)使用例子

abstract classPrinter{public abstract voidprint(Ticket t);

}

Printer p= new ?();

p.print(t);

模板设计模式

一个模板方法,里面包含多个细节步骤,这些步骤是不知道如何具体实现,给子类实现public abstract classTemplate{public final voidtemplate(){

m1();

m2();

m3();

m4();

}public abstract voidm1();public abstract voidm2();public abstract voidm3();public abstract voidm4();

}

}

(5)抽象类意义

1 抽象的,高层的类能够代表更宽的范围,不容易出错

2 抽象类可以在后期的需求变化用不同的子类来代替,这样使我们的程序更加灵活

class派叫号系统{

HPPrinter p= newHPPrinter()

p.print(t);

}class派叫号系统2{

BrotherPrinter p= newBrotherPrinter()

p.print(t);

}class派叫号系统3{

XxxxPrinter p= newXxxxPrinter()

p.print(t);

}class派叫号系统{

Printer p= new ???();

p.print(t);

}

二.接口

(1)定义与语法

为什么使用接口

例子:要求实现防盗门的功能

分析:门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能。

将门和锁分别定义为抽象类

防盗门可以继承门的同时又继承锁吗?如何实现多继承??

如何解决这个问题呢?

1.将门定义为抽象类,锁定义为接口

2.防盗门继承门,实现锁的接口

语法:

public interface MyInterface {

// 所有方法都是:public abstract

public void foo(); //其他方法

}

必须知道的接口特性:

接口不可以被实例化

实现类必须实现接口的所有方法,除非实现类是抽象类。

实现类可以实现多个接口

接口中的变量都是静态常量

(2)语法限制

1 实现一个接口就必须实现这个接口所有方法,除非它是一个抽象类

2 一个类是不能继承多个类(单继承),可以避免很多问题,接口可以继承多个接口

3 类不能继承接口,接口也不能继承类(类继承父类。)

4 一个类可实现多个接口

5 实现接口的方法,访问控制符不能更窄。

(3)使用例子

1.接口是一种约定:大小,针数量。

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

程序设计时面向接口的约定而不考虑具体实现

2.接口表示一种能力

接口表示一种能力。

20190203221058610522.png

20190203221058755059.png

需求说明:原始的手机,可以发短信,通电话。随着发展,手机增加了功能:音频、视频播放、拍照、上网。

20190203221058859555.png

20190203221058969911.png

接口是一种约定:

20190203221059095892.png

墨盒和纸张的规格是一种约定 打印机需要遵守这些约定

用面向接口编程的方式开发制定墨盒、纸张的约定或标准

打印机厂商使用墨盒、纸张的标准开发打印机

其他厂商按照墨盒、纸张的标准生产墨盒、纸张

实现步骤:

定义墨盒接口InkBox

定义纸张接口Paper

定义打印机类

实现墨盒接口

实现纸张接口

(4)接口回调

回头调用

一个类依赖接口,这个类可以提前写好,过了很久之后 ,有人需要让这个类去运行,他做为后来者,只需提供一个实现了该接口的类,就可以让这个类去运行。这就是接口回调。

20190203221059184763.png

(5)抽象类和接口的区别(面试)

很多时候我们都将抽象类和接口混淆,如果分不出定义抽象类和接口的时候,最好直接定义为接口,为了保留有限而且宝贵的java单继承天性。

1 语法区别

1)抽象类可以包含具体方法,但接口中所有的方法都必须抽象的

2)一个类只继承一个抽象类 ,但是可以实现多个接口

3)抽象类实现接口,反之,接口不能继承抽象类,接口可以继承多个接口。

4)抽象类定义的成员变量就是普通的实例变量,接口中定义的成员变量会变成静态常量

5) 抽象类可以有具体的方法,这些具体的方法里面就可以写一些共性代码,这样子类就可以继承下来,避免重复代码,有的时候会用抽象类来代替接口

2 语义区别

is a 继承关系

has a 实现关系

interface Alert

报警

abstract Door

打开

关闭

AlertDoor extends Door implements Alert

报警

打开

关闭

接口 Fighter{

fight()

}

学生 implements Fighter{}

study()

fight()

黑社会分子 implements Fighter{}

fight()

接口 Flyable{

fly()

}

飞机 implements Flyable{

fly()

}

鸟 implements Flyable{

fly()

}

超人 implements Flyable{

fly()

}

连接数据库

接口 Driver{

connection()

}

Mysql 驱动 implements Driver{

connection()

}

Oracle 驱动 implements Driver{

connection()

}

Sql Server 驱动 implements Driver{

connection()

}

(6)广义接口定义

1 代表一个类,一个方法,或者java中的interface

2 通信协议

3 数据接口(比如json格式的数据接口)

4 用户界面(用户接口UI = User Interface) UI

20190203221059269727.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值