抽象类和接口以及二者的区别

一、抽象类

  关键字:abstract,抽象的,可以修饰类和方法。

  1)抽象方法,父类声明一个方法但不能提供方法实现,该方法的实现子类提供,这样的方法交抽象方法。

  2)抽象类:有一个或更多抽象方法的类称为抽象类,前提是继承基础之上。抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

  1.abstract修饰类:抽象类

   (1)不可被实例化

   (2)抽象类有构造器,可以重载多个=>凡是类都有构造器 

   (3)抽象方法所在类一定是抽象类

   (4)抽象类里可以定义常量,变量,可以定义非抽象方法,但是方法包括{},也可以定义静态方法,方法也要有{},抽象方法不需要{}。

  2.abstract修饰方法

   (1)格式:没有方法体,包括{}。

   (2)意义:抽象方法保留了功能,而且执行交给抽象类的子类,由子类重写此抽象方法。

   (3)若子类继承抽象类,并重写所有抽象方法,则此类是一个实例类,即可实例化。反之,若没有重写所有方法,意味着此类仍有抽象方法,则必须声明类为抽象的。

  3.abstract使用的限制   

   (1)不能和final一起使用:final是最终的,不能被修改,继承后不能重写。

   (2)不能和static一起使用:"类名.方法名"调用方法,但abstract修饰的方法没有方法体。

   (3)不能用来修饰属性:属性没有重写的说法。

   (4)不能用来修饰构造器:构造器不能被重写。

   (5)不能和private一起使用:抽象方法是建立在继承的前提下。

二、接口

  关键字:interface。是一个特殊的抽象类,所有的属性值是常量,所有的方法是抽象方法。Jdk1.8以上可以定义静态方法,但是必须含有{},通常是由类实现接口然后重写抽象方法。

三、对比

  (1)抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

  (2)抽象类要被子类继承,接口要被类实现

  (3)接口只能做方法申明。抽象类中可以做方法申明,也可以做方法实现。

  (4)接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

  (5)抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

  (6)抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。

  (7)抽象类里可以没有抽象方法。

  (8)如果一个类里有抽象方法,那么这个类只能是抽象类。

  (9)抽象方法要被实现,所以不能是静态的,也不能是私有的。

  (10)接口可继承接口,并可多继承接口,但类只能单根继承。

  (11)接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。

    

四、什么时候使用抽象类和接口

  (1)如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。

  (2)如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。

  (3)如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。

原文地址:https://www.cnblogs.com/lyr999736/p/8878585.html

时间: 2024-10-26 14:42:27

抽象类和接口以及二者的区别的相关文章

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

抽象类和接口联系与区别 关键字: 抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于

java中抽象类和接口的用法和区别

一.抽象类 1.抽象类 包含一个抽象方法的类就是抽象类 2.抽象方法 声明而未被实现的方法,抽象方法必须使用abstract关键词字声明 public abstract class People { //关键词abstract,声明该类为抽象类 public int age; public void Num() { } public abstract Name(); //声明该方法为抽象方法 } 3.抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法 4.抽象类不能被直接实例

转载:java中抽象类和接口的作用与区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.

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

抽象类: 抽象方法必须用abstract关键字进行修饰.如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰.因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象. 抽象类可以拥有成员变量和普通的成员方法. 抽象类和普通类的主要有三点区别:1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public.2)抽象类不能用来创建对象:3)如果一个类继承于一个抽象类,则子类

php中抽象类和接口的特点、区别和选择

一.特点: 1.抽象类特点 (1) 用 abstract 来修饰一个类,那么这个类就是抽象类:抽象类绝对不能被实例化,即$abc = new 抽象类名();会报错. (2) 用abstract 来修饰一个方法,那么该方法就是抽象方法: (3) 如果类中有一个抽象方法,那么该类就必须定义为抽象类:但反过来,抽象类里并不一定要有抽象方法.另外,抽象类里也可以有普通方法. (4) 抽象方法不能有方法体.即abstract function abc();------后面不能加大括号{.........}

浅析php中抽象类和接口的概念以及区别[转]

//抽象类的定义: abstract class ku{ //定义一个抽象类 abstract function kx(); ...... } function aa extends ku{ //实现抽象类的方法 function kx(){ echo 'sdsf'; } } //使用方法 $aa=new aa; $aa->kx(); //1.定义一些方法,子类必须完全实现这个抽象中所有的方法 //2.不能从抽象类创建对象,它的意义在于被扩展 //3.抽象类通常具有抽象方法,方法中没有大括号 /

关于抽象类与接口

抽象方法:没有方法体的方法被称为抽象方法. 抽象类:含有抽象方法的类称为抽象类. 抽象类中的抽象方法必须被实现. 如果子类继承父类时没有实现父类中的抽象方法,那么这个子类也变成了抽象类. 抽象类中的普通方法可以不被实现. 注意事项: 1.被abstract修饰的方法称为抽象方法,被abstract修饰的类称为抽象类. 2.含有抽象方法的抽象类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写. 3.抽象类不能被实例化. 4.抽象方法只需声明,不需要实现某些功能. 接口:当抽象类中所有的方法

Java_Day09(final,多态,抽象类,接口)

1:final关键字(掌握)    (1)是最终的意思,可以修饰类,方法,变量.    (2)特点:        A:它修饰的类,不能被继承.        B:它修饰的方法,不能被重写.        C:它修饰的变量,是一个常量.    (3)面试相关:        A:局部变量            a:基本类型 值不能发生改变            b:引用类型 地址值不能发生改变,但是对象的内容是可以改变的        B:初始化时机            a:只能初始化一次. 

面向对象基础之抽象类与接口 上

在两年前学习C++的时候,知道抽象类这么一个概念,当时并不是很理解,如今在学习C#和设计模式的时候,再一次碰到了这个含糊不清的东西,同时又在C#中学习到了接口技术,接口也早有耳闻,但是当时理解的接口就是一个或者一组能够操作类中数据的函数或者方法.虽然老师举过很多例子,比如电视机这个事物,它对外的接口就是遥控器,遥控器里好多的按钮,按钮的下面就是各种各样的命令或者称之为方法. 当抽象类遇到接口的时候,顿时蒙圈了,这两个概念的确是让人很难区别,那么我今天就来总结一下抽象类和接口到底有哪些区别和联系,