ICode9

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

java的抽象类和接口的异同点

2021-12-16 10:33:30  阅读:149  来源: 互联网

标签:java 异同 abstract 接口 抽象 抽象类 方法 public


对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。

抽象类

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。

那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。

而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。

abstract class A{//定义一个抽象类
	
	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}
	
	public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
	
}

使用:

package com.wz.abstractdemo;

abstract class A{//定义一个抽象类
	
	public void fun(){//普通方法
		System.out.println("存在方法体的方法");
	}
	
	public abstract void print();//抽象方法,没有方法体,有abstract关键字做修饰
	
}

public class TestDemo {

	public static void main(String[] args) {
		A a = new A();
	}
}

运行:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Cannot instantiate the type A

	at com.wz.abstractdemo.TestDemo.main(TestDemo.java:15)

接口

官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。

接口(interface)是抽象方法和常量值的定义的集合。

从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。

接口定义举例

public interface Runner 
   int id = 1
   public void start()
   public void run()
   public void stop()    
}

两者的差别

1.语法层面上的区别

1>抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

2>抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

3>接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

4>一个类只能继承一个抽象类,而一个类却可以实现多个接口。

2.设计层面上的区别

1>抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

1、接口中不能有构造函数,抽象类中可以有构造函数;
2、接口中只能有常量属性,抽象类中可以有一般属性;
3、接口中所有的方法都是public的,而抽象类中的方法可以被public、protect、default和private修饰
4、接口中所有的方法都是抽象的,不能有方法题,抽象类中可以有方法体;
5、接口中不能有静态方法(jdk1.8之后可以有静态方法,必须要有方法体),抽象类中可以有;
6、java支持多实现,但是只支持单继承;
7、抽象类中可以没有抽象方法

标签:java,异同,abstract,接口,抽象,抽象类,方法,public
来源: https://blog.csdn.net/Michael___J/article/details/121966606

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

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

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

ICode9版权所有