ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA抽象类和接口的语法及异同

2021-12-22 23:59:07  阅读:144  来源: 互联网

标签:JAVA 异同 子类 接口 抽象 抽象类 方法 public


一、抽象类

1.概念

     在继承地层次结构中,每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追溯,类就会变得更通用、更加不明确。类的设计应该确保父类包含它的子类的共同特征。有时候,一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的类成为抽象类。

2.知识点


        抽象类和常规类很像,但不能使用new操作符创建它的实例。它的实现由子类提供。一个包含抽象方法的类必须声明为抽象类。

        一个抽象方法只有方法头没有方法主体。格式为:访问修饰符 abstract 返回类型 方法名(参数列表);抽象方法的出现就使得在类上出现了一定的区分,将包含抽象方法的类称为抽象类。因此在声明抽象类时也需要加上abstract关键字。格式为:public abstract class 类名;抽象类可以含零至多个普通方法,也可以含零至多个抽象方法。但是,抽象类不允许被实例化,即其只能作为父类。若父类是抽象类,且子类不想成为抽象类,则子类必须将父类中的所有抽象方法重写为带方法体的普通方法,否则子类仍必须是抽象类。

public abstract class Guns{
	public abstract void shoot();
	public abstract void speed();
}

 

这样就定义了类名为Guns的抽象类。

        抽象类不能用new来创建实例,我们需要一个子类来实现其包含的所有抽象方法。

public class AK47 extends Guns{
	public void shoot() {
		System.out.print("AK47 shoot");
	}
	public void speed() {
		System.out.print("300m/s");
	}
}

二、接口

1.概念

接口在许多方面都与抽象类很相似,但是它的目的是指明相关或者不相关的对象的共同行为。例如,使用适当的接口,可以指明这些对象是可比较的、可食用的或者可克隆的。

2.知识点

在JAVA中,接口被看作是一种特殊的类。就像常规类一样,每个接口都被编译为独立的字节码文件。使用接口或多或少有点像使用抽象类。与抽象类相似,不能使用new操作符创建接口的实例。

        格式:public interface 接口名称

        在接口中的方法虽然没有说明是抽象方法,但默认其为public以及是抽象方法。

        下面举例如何定义一个接口:
 

public interface Gun{
	public void shoot();
	public void speed();
}

这样就定义了名为Gun的接口。

        需要注意的是,即便两个方法前没有abstract,但这两个方法都是抽象方法。

        所以需要在子类中重写这俩方法,我们用implements关键字来实现接口:

public class M4A1 implements Gun{
	public void shoot() {
		System.out.print("M4A1 shoot");
	}
	public void speed() {
		System.out.print("450m/s");
	}
}

三、抽象类和接口的比较

1、语法层面上的区别
1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2、设计层面上的区别
① 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

② 设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

四、小结


本文介绍了抽象类和接口以及两者之间的区别。抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

标签:JAVA,异同,子类,接口,抽象,抽象类,方法,public
来源: https://blog.csdn.net/bjbdjabfj/article/details/122097527

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有