浅谈JAVA接口和抽象类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈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方法)。
目前知道的就这么多,后面学习过程中有新的发现,再来补充~~~~
以上是关于浅谈JAVA接口和抽象类的主要内容,如果未能解决你的问题,请参考以下文章