详解Java抽象类和接口(java抽象与接口)

createh54个月前 (02-01)技术教程30

抽象类

使用了关键字abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。特征:

1、抽象类是不完整的(可以理解为类中的方法并没有完全实现),并且它只能用作基类。

2、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。

3、在继承抽象类时,必须覆盖该类中的每一个抽象方法

示例:设计一个门类,因为是普通门和指纹门开门的方式是不同的:普通门用钥匙;指纹门可以输入指纹、可以按密码或者用钥匙。但是,二者关门的方式都一样(把门一堆就可以关上了)。这里就符合抽象类的设计思路,把开门设计成抽象方法,具体方法内容交给子类去实现;而把关门设计成普通方法,子类复用该方法就好。

代码实现如下:

public abstract class Door{
	public abstract void open();
	public void close(){
		System.out.println("关门!");
	}
}

public class CommonDoor extends Door {

	@Override
	public void open() {
		System.out.println("普通门用钥匙开门。");
		
	}

}
public class FingerprintDoor extends Door {

	@Override
	public void open() {
		System.out.println("指纹门用钥匙、指纹、密码都可以开门。");
		
	}

}

接口

Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。接口通过关键字interface来定义,类使用接口通过关键字implements来实现。例如:public class A implements B

特征:

1、 一个类可以实现多个接口,接口弥补了类的不能多继承缺点。

2、 Java接口本身没有任何实现,只描述行为,所以Java接口比Java抽象类更抽象化。

3、 接口不是类,不能使用new 来实例化一个接口。

4、 接口中的方法可以有参数列表和返回类型,但不能有任何方法体。

5、 接口中可以包含字段,但是会被隐式的声明为static和final。

6、 接口中的字段只是被存储在该接口的静态存储区域内,而不属于该接口。

7、 接口中的方法可以被声明为public或不声明,但结果都会按照public类型处理。

8、 实现一个接口时,需要将被定义的方法声明为public类型,否则为默认访问类型,Java编译器不允许这种情况。

9、 如果没有实现接口中所有方法,那么创建的仍然是一个接口。

10、 扩展一个接口来生成新的接口应使用关键字extends,实现一个接口使用implements。

示例:

还是门这个类,除了普通门和指纹门,还有警报门,它除了具有开门关门的方法外,还可以实现告警功能,而告警功能并不具备门的普遍性,因此合理的做法是把告警设计成一个接口,当有些门具备告警功能时就去实现告警接口。

代码实现如下:

public interface Alarm{
	public void alarm();
}

public class AlarmDoor extends Door implements Alarm {

	@Override
	public void alarm() {
		// TODO Auto-generated method stub
		System.out.println("警报门有告警功能。");
		
	}

	@Override
	public void open() {
		System.out.println("警报门用钥匙、指纹、密码都可以开门。");
		
	}

}

面向接口编程的理解

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。“面向接口编程”中的“接口”可以说是一种从软件架构的角度、从一个更抽象的层面上指那种用于隐藏具体底层类和实现多态性的结构部件。这里的接口是一种思想层面的用于实现多态性、提高软件灵活性和可维护性的架构部件,而具体语言中的“接口”是将这种思想中的部件具体实施到代码里的手段。接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。接口的本身反映了系统设计人员对系统的抽象理解。

接口和抽象类的区别

1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的。

2.实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

3.接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承。

4.接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

选择接口还是抽象类

1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。

2. 如果知道某个类应该是基类,那么第一个选择的应该是让它成为一个接口,只有在必须要有方法定义和成员变量的时候,才应该选择抽象类。因为抽象类中允许存在一个或多个被具体实现的方法,只要方法没有被全部实现该类就仍是抽象类。

相关文章

Java基础之浅谈接口(java接口基础知识)

前言前几篇文章我们已经把Java的封装、继承、多态学习完了,现在我们开始比较便于我们实际操作的学习,虽然它也是Java基础部分,但是其实入门容易,精通很难。我认真的给大家整理了一下这些必须学会、了解的...

抽象类和接口(抽象类和接口的区别和相同点)

抽象类就像这个代码:在这个打印图形的例子当中,可以看到父类的 shape 方法并没有实际作用,主要的工作都由子类完成了,像这些没有实际工作的方法,我们就可以把它设计成一个抽象方法,包含抽象方法的类叫做...

揭秘什么是面向接口编程(面向接口的好处)

先用一个案例来给大家说明一下面向接口编程。案例:有一个电脑类(Computer),电脑除了有基本的开机关机功能外,还有连接任何外接设备的功能,比如能电脑能连接外置键盘(Keyboard),鼠标(Mou...

Java 枚举与策略模式、函数式接口的结合:实现高内聚低耦合的设计

作者:京东物流 杨唯一一、Java 枚举类Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。我们在业务需求开发中,通常...

从0开始搭建开发自己的代码测试框架-接口java篇

从0开始搭建开发自己的代码测试框架-接口java篇多数人了解测试自动化后,大多理解和知道什么是自动化,也知道为什么要做自动化,同样知道自动化的目的是什么。但是不知道对于这个自动化,怎样开始做,都用到哪...

java中接口interface有什么用呢(java中的接口)

接口只有方法的定义,没有方法的任何实现。那这有什么意义呢?马克-to-win: 接口就像一个服务合同。接口只关心必须得干什么而不关心如何去实现它。有意义吗?有意义。马克-to-win:比如我们的软件经...