浅谈JAVA接口和抽象类

一、什么是抽象方法、抽象类

抽象方法:

1、背景(为什么要有抽象方法):有一些方法,一出生就是用来让别人继承重写使用的,自己完全没有去实现的必要,只用定义就可以了,于是JAVA里就专门将这种方法称为抽象方法。

2、定义:用abstract修饰符来声明一种方法,而且这种方法只有声明,没有实现。

例如:

public abstract test();//只做了声明,没有实现,连“{}”都不写。

抽象类:

1、背景:因为抽象方法是定义在类里面的,抽象方法是只有声明没有实现的方法,即是残缺不全的,于是JAVA中将这种有残缺不全方法的类,称为抽象类。

2、定义:和前面的抽象方法类似,JAVA中将这种生来就是为了让人继承的类,称为抽象类。

注意:1、抽象方法必须要是在抽象类里,但是抽象类里可以没有抽象方法。

    2、该抽象方法所在的类,必须是抽象类。

二、什么是接口

1、背景(为什么要有接口):JAVA内没有多重继承的概念,但是现实生活中的对象存在这种现象,所以就有了接口。

例如:"猫" 属于"动物",也属于“猫科"但是在JAVA里没有多重继承来描述,所以用接口来描述---->class Cat implements Animal,Felidae{}

2、定义:接口是抽象方法和常量值的定义的集合(接口里不能有变量接口里的方法都是抽象方法),它是一种特殊的抽象类

--->备注:(1)接口里声明的属性(成员变量)必须定义为public static final xx xx,就算你在接口里写成 int a,也默认被当成 int xx= public static final int xx。

     (2)接口里的方法只能是抽象方法,必须为public的,必须为抽象的,就算定义成 void methmod,也默认当成 void methmod = public abstract void methmod

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

特别注意:以上规定是JAVA8之前的版本,但是在JAVA8之后的版本中,接口中可以有实例方法(public static void)、可以有默认方法(public default)。

为什么要更新这个特性,具体解释可以参考:http://www.cnblogs.com/jilodream/p/5786036.html

比如:

1、接口中的实例方法可以直接使用

public interface UserInterface{

  public static void methodStatic(){

  }

  public default methodDefault(){

  }

}

public class Test{

  UserInterface inter = new UserInterface();//可以把这个接口当做一般抽象类一样new一个实例

  inter.methodStatic;//直接调用它的静态方法

}

2、默认(default)方法,可以直接传递给实现该接口的类使用(Test类不实现该接口直接调用、Test类实现该接口后再调用、Test类实现接口后重写再调用)

public class Test{

  UserInterface.super.methodDefault;//不实现接口直接调用,注意需要使用"super."

}

ps:其他两种方式,这里就不举例了。

、相同点

1、接口也是类,她也有自己的成员变量和成员方法;

三、接口和抽象类的不同点

其实JAVA8版本之后,她两的区别已经不明显了(由上面的“特别注意”就可以发现)。

1、定义方式不同

类的定义:class Test{}

接口的定义:interface Inter{}

2、被使用的方式不同

类的继承:xx extends Test{}

接口的实现:xx implements Inter{}

PS:在使用的时候,最大的一个区别是,一个类可以同时实现多个接口-->xx implements Inter1,Inter2{}

3、内部属性不同

类的内部属性:没有做限制。

接口的内部属性:必须为public static final(即,成员变量必须是常量),而且接口是常量和抽象方法的集合(当然JAVA8之后,接口里也可以有实例方法和default方法)。

目前知道的就这么多,后面学习过程中有新的发现,再来补充~~~~

时间: 2025-01-01 04:58:40

浅谈JAVA接口和抽象类的相关文章

浅谈Java接口和抽象类的区别

面向对象的设计,服用的重点其实应该是抽象层的复用,而不是具体某一个代码块的复用. 说到了抽象,就不得不提到Java接口和Java抽象类了,这也是我这里想要谈论的重点. Java接口和抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现.OOP面向对象编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口编程,面向抽象编程,正确地使用接口,抽象类这些有用的抽象类型作为你结构层次上的顶层. Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方

浅谈Java接口(Interface)

浅谈Java接口 先不谈接口,不妨设想一个问题? 如果你写了个Animal类,有许多类继承了他,包括Hippo(河马), Dog, Wolf, Cat, Tiger这几个类.你把这几个类拿给别人用,但是别人想给动物加上宠物功能,要怎么办呢? 根据以往的知识,我们可以: 把Pet方法加入Animal类 这样所有的子类都有Pet方法,以后新继承Animal的动物也有这个方法. 这个方案很简单,但是这个方案也很操蛋.为什么? 有人会养河马吗?有人会养狼养狮子吗?不太行. 如果都是Pet方法,狗需要遛,

浅谈java接口

一.接口的本质探讨        官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想.如果你是天使,则必须能飞.如果你是汽车,则必须能跑.如果你是好人,则必须能干掉坏人;如果你是坏人,则必须欺负好人. 接口的本质是契约,就像我们人间的法律一样.制定好后大家都遵守. 二.为什么需要接口?

浅谈Java的默认和静态方法

目录 浅谈Java的默认和静态方法 Java新增默认方法有啥用 Java新增的静态方法有啥用 浅谈Java的默认和静态方法 允许在接口中声明默认方法和静态方法,是JDK1.8新增的特性.存在即合理,两者的出现,让接口越来越像抽象类(关于两者之别下一篇做总结),那么它们为什么出现呢,它们的出现产生了哪些便利,Java小白开始学习并总结,不足之处,还望评论区指点一二! Java新增默认方法有啥用 官方解答:默认方法允许您添加新的功能到现有库的接口中,并能确保与采用旧版本接口编写的代码的二进制兼容性.

浅谈 Java Printing

浅谈 Java  Printing 其实怎么说呢?在写这篇博文之前,我对java printing 可以说是一无所知的.以至于我在敲文字时, 基本上是看着api文档翻译过来的.这虽然看起来非常的吃力,但是我相信,有道大哥不会辜负我的.嘻 嘻! Java Printing 技术,也就是我们平时所接触的打印,只不过是说可以用Java实现而已. 一.Java Printing 打印简介 Java Printing API能够使java应用程序实现相关的打印功能,如: 1.打印所有 Java 2D 和

浅谈Java中的深拷贝和浅拷贝

浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: [java] view plaincopyprint? int apples = 5; int pears = apples; int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float

浅谈 Java 主流开源类库解析 XML

在大型项目编码推进中,涉及到 XML 解析问题时,大多数程序员都不太会选用底层的解析方式直接编码. 主要存在编码复杂性.难扩展.难复用....,但如果你是 super 程序员或是一个人的项目,也不妨一试. Jdom/Dom4j/Xstream... 基于底层解析方式重新组织封装的开源类库,简洁明了的 API,稳定高效的运行表现. Dom4j 基于 JAXP 解析方式,性能优异.功能强大.极易使用的优秀框架.想了解底层解析方式请翻看:浅谈 Java XML 底层解析方式 Jdom 你细看内部代码,

浅谈java类集框架和数据结构(2)

继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主要有最重要的三种实现:ArrayList,Vector,LinkedList,三种List均来自AbstracList的实现,而AbstracList直接实现了List接口,并拓展自AbstractCollection. 在三种实现中,ArrayList和Vector使用了数组实现,可以认为这两个是

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用