抽象类与接口的区别

原创 2016年05月31日 20:31:14
抽象类:

 抽象使用abstract关键字,该关键字可以修饰方法,这样的方法叫作抽象方法,或者修饰类,这样的类叫作抽象类。
  抽象的方法不允许有方法体,抽象的方法不允许存在于普通的类当中。如果抽象方法在类中,则该类必须也是抽象的。
  抽象类中的方法并不要求是抽象的,即抽象类中可以没有抽象方法,也可以所有方法都是抽象的。
  抽象类被认为是“不完整”的类,所以,抽象类不可以直接创建对象,即不可以使用new语法创建对象,但是,抽象类也是存在构造方法的,且该构造方法会在创建其子类对象时被调用。
  由于抽象类本身不可以直接创建对象,所以,在绝大部分应用场景中,可以认为“抽象类就是用于被继承的”。
  抽象方法没有方法体,具体的实现应该是由子类来重写的。当某个类继承了抽象类之后,必须重写抽象类中的抽象方法,除非该子类也是抽象的。
  
  public abstract class Animal {
    public void eat(){};
    public abstract void run();
  }

  public abstract class Cat extends Animal{
    // public abstract void run();
  }

  public abstract class Dog{}

 接口:

接口的组成结构与类基本一致。
  接口中的所有成员都是公有(public)的。
  接口中的所有属性都是静态常量(static final)。
  接口中的所有方法都是抽象的(abstract)
  以下2种语法是完全等效的:
  public interface USB {
    String NAME = "usb-device";
    void read();
    void write();
  }
  public interface USB {
    public static final String NAME = "usb-device";
    public abstract void read();
    public abstract void write();
  }
  类与接口的关系是实现与被实现的关系,使用implements关键字,当类实现了接口,则该类称为该接口的实现类。
  同一个类可以同时实现若干个接口,各接口名称之间使用逗号进行分隔,且该类需要实现所有接口中的所有抽象方法,例如:
  public class MainActivity extends Activity implements OnClickListener, OnItemClickListener, OnCheckedChangeListener, OnSeekBarChangeListener { }
  接口与接口之间也可以继承,使用extends关键字,例如:
  public interface InterfaceA extends InterfaceB {}
  同一个接口可以同时继承若干个接口,各父级接口名称之间使用逗号进行分隔,例如:
  public interface InterfaceA extends InterfaceB, InterfaceC, InterfaceD {}
  假设某个类实现了InterfaceA,则该类必须重写InterfaceA、InterfaceB, InterfaceC, InterfaceD中所有的抽象方法。
  接口的作用通常是制定一套标准或规范。
 

接口和抽象类的区别---相信你看完不会再混淆了

一、引言 我想,对于各位使用面向对象编程语言的程序员来说,“接口”这个名词一定不陌生,但是不知各位有没有这样的疑惑:接口有什么用途?它和抽象类有什么区别?能不能用抽象类代替接口呢?而且,作为程序员,一...
  • wenwen091100304
  • wenwen091100304
  • 2015年09月12日 11:09
  • 22921

接口和抽象类的联系和区别

一 接口和抽象类的相似性 1 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。 2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 09:57
  • 3422

JAVA中接口和抽象类的区别?

原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实...
  • u010355144
  • u010355144
  • 2015年04月08日 18:04
  • 562

面试题_抽象类和接口的区别

含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不...
  • baidu_31337243
  • baidu_31337243
  • 2015年09月15日 21:35
  • 1797

java中抽象类和接口的三点区别

一个类可以实现多个接口,但却只能继承最多一个抽象类 抽象类可以包含具体方法;接口的所有方法都是抽象的 抽象类可以声明和使用字段;接口则不能,但可以创建静态的final常量 抽象类中的方法可以是p...
  • sundujing
  • sundujing
  • 2015年11月06日 16:36
  • 1123

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

文章《浅析C#中接口的重要性》中讲述了如何声明和使用接口。但是C#具有abstract关键字形成的抽象类,那么二者我们该如何选择呢!C#允许把类和函数声明为abstract。抽象类不能实例化,而抽象函...
  • wangshubo1989
  • wangshubo1989
  • 2015年09月01日 09:00
  • 3584

面试常见题---------java中抽象类跟接口的区别

含有abstract修饰符的class 即为抽象类,abstract类不能创建实例对象,含有abstract的方法的类必须定义为abstract class ,abstract class 里的方法不...
  • huangchunwju
  • huangchunwju
  • 2014年04月23日 11:31
  • 946

java中抽象类和接口之间的区别和关系

首先抽象类归根结底还是属于类,对于抽象方法,是只能存在于抽象类中的,我们无法再一个非抽象的类中声明一个抽象方法,其次抽象方法只需要声明,并不需要事先。当我们要写一个抽象类的时候只需要在类的前面声明为a...
  • ysayk
  • ysayk
  • 2016年06月12日 23:08
  • 1206

抽象类和接口的区别(设计上的区别)

一、抽象类设计上的区别1、抽象类是一种对事物的抽象,包括了属性和行为,而接口是局部的抽象,仅对行为的抽象。抽象类是对整个类抽象,接口只对类中行为抽象。 举个例子:鸟类和飞机类这两个不同事物的类型,...
  • dynaamo
  • dynaamo
  • 2015年07月18日 20:54
  • 752

C# 中普通类、抽象类、接口之间的区别

一、普通类和抽象类之间的异同 1.都可以被继承 2.抽象类不能被实例化,只是用来继承的。普通类可以实例化 3.抽象方法只有含方法声明而没有方法体且必须包...
  • T_Twory
  • T_Twory
  • 2016年05月31日 09:41
  • 2019
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象类与接口的区别
举报原因:
原因补充:

(最多只允许输入30个字)