Java中抽象类与接口的区别

   接口和抽象类有好多相同点和类似点,很多人有过这样的疑问:为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种。

  理解抽象类

  abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?

  抽象类:抽象类是一种特殊的基类,里面除包含一些基本的属性和方法之外,还能包含一些只声明但没有实现的方法,用abstract去声明

例如:


  接口:接口是一种更加抽象的类型,里面声明的方法全部公开给实现者去实现,并不关心具体细节 关键字是interface

  综上所看 可以看出抽象类和接口的主要区别有:

  1.抽象类可以有自己的方法,但接口的方法只有声明

  2.抽象类的抽象方法使用abstract声明

  其它需要注意的有:

  1.一个类只能继承一个实现类,但是可以实现多个接口

  2.当一个抽象类和一个接口有公共的属性时,如果一个类同时实现这个抽象类和接口 则编译不会通过。

  接口:

  一种高度抽象的“抽象类”,使用interface关键字声明

  下面定义一个Usb接口:

  public interface Usb {

  public void start();

  public void end();

  }

  接口中没有构造方法

  接口和抽象类一样,不能用于实例化

  接口中不能定义变量,方法不准有方法体,方法默认为public,接口中方法和抽象方法不准有private修饰

  只能继承接口,支持多继承(接口之间用逗号隔开)

  类实现接口,使用关键字implements:

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

  2.一个类可以实现多个接口

时间: 2024-10-31 20:17:58

Java中抽象类与接口的区别的相关文章

PHP中抽象类、接口的区别与选择分析_php技巧

本文实例分析了PHP中抽象类.接口的区别与选择.分享给大家供大家参考,具体如下: 区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以通过关键字extends继承. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量.抽象类中可以声明各种类型成员变量,实现数据的封装.(另JAVA接口中的成员变量都要声明为public static final类型) <?php abstract class Father { funct

Java中抽象类和接口区别的个人见解

抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {     // abstract method     abstract void service(ServletRequest req, ServletRe

PHP中抽象类和接口的区别与例子

PHP中抽象类和接口区别: 1.对接口的使用是通过关键字implements.对抽象类的使用是通过关键字extends.当然接口也可以用extends继承.abstract 关键字来定义个一个抽象类或者抽象方法.抽象类不能被实例化. 2.接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量.抽象类中可以声明各种类型成员变量,实现数据的封装.(另JAVA接口中的成员变量都要声明为public static final类型).抽象类中可以有成员属性和成员方法,而接口中只能有未实现的方法和常

C#中抽象类和接口的区别

一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们. 二.接口: 接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1.不能实例化: 2.包含未实现的方法声明: 3.派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括

C++中抽象类和接口的区别介绍_C 语言

1. 如果一个类B在语法上继承(extend)了类A, 那么在语义上类B是一个类A.2. 如果一个类B在语法上实现了(implement)接口I, 那么类B遵从接口I制定的协议. 使用abstract class的根本原因在于, 人们希望通过这样的方式, 表现不同层次的抽象. 而interface的本质是一套协议. 在程序设计的发展中, 人们又发现接口可以用来表示对行为的抽象, 不过, 这只是interface的一种用法不是其本质. 理论结合实际才是最好的学习方式, 不过在这里, 我只想举一些我

php中抽象类和接口的概念以及区别

本篇文章是对php中抽象类和接口的概念以及区别进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: //抽象类的定义: abstract class ku{ //定义一个抽象类 abstract function kx(); ...... } function aa extends ku{ //实现抽象类的方法 function kx(){ echo 'sdsf'; } } //使用方法 $aa=new aa; $aa->kx(); //1.定义一些方法,子类必须完全实现这个抽象中所

java 抽象类与接口的区别介绍_java

抽象类与接口的区别 抽象类 包含抽象方法的类就是抽象类,声明的语句:abstract class 必须是public protected 接口 对行为的抽象,声明语句:interface 抽象方法的修饰符:public abstract 成员变量的修饰符:public static final 语法层面 抽象类中可以包含成员方法的实现细节,而接口中只能存在抽象方法-public abstract 抽象类中的成员变量可以是各种类型,接口中的成员变量只能是public static final 抽象

请问java中类库跟包的区别

问题描述 请问java中类库跟包的区别 请问类库跟包的区别是什么? 解决方案 类库包含很多个包 解决方案二: 库通常是一个组功能的集合,像Spring就是一个类库,可以理解为一个工程:而包是类的容器,用于分隔类名空间,是一个工程下的一部分. 解决方案三: 你只需要知道类库包含包就可以了 解决方案四: 类库字面意思就是类的集合,类库不等于框架,Framework 是比类库更高一级的概念.类库是一个综合性的面向对象的可重用类型集合,这些类型包括:接口.抽象类和具体类.类库可以单独从第三方软件商获得.

线程-java中this和Thread.currentThread()区别,见下代码

问题描述 java中this和Thread.currentThread()区别,见下代码 public class hello extends Thread { public hello(String name){ super(name); System.out.println(""Thread.currentThread().getname()=""+Thread.currentThread().getName()); System.out.println(&qu