接口和抽象类的区别是什么?
(1)接口只有定义,其方法不能在接口中实现,只有实现接口的类才能实现接口中定义的方法,而抽象类可以有方法的定义和实现
(2)接口需要实现(implements),但抽象类只能被继承(extends)。一个类可实现多个接口,但只能继承一个类,接口可借此实现多重继承。
(3)接口:“has-a”,继承:"is-a”
(4)接口中成员默认是public static final,只有静态的不能被修改的数据成员,且必须赋初值,所有成员方法都是public、abstract,且只能被这两个关键词修饰。而抽象类可以有自己的数据成员变量,也可以有非抽象的成员方法。
相同点:
(1)都不能被实例化
(2)只有实现了接口或者抽象类中的方法后,才能被实例化。
1.Java interface implements
(1)interface(接口)定义一些方法,并没有实现,需要implements来实现才可用。
(2)interface的引入是为了部分地提供多继承的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。接口定义的方法不能够修改。一个类通过关键字implements声明自己使用一个或者多个接口。
(3)extend可以继承一个接口,但仍是一个接口,也需要implements之后才可用。
(4)在interface之间也可以声明为extends(多继承)的关系。继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了;比如 class A extends B implements C,D,E。
(5)接口实现的注意点:
a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
b.接口中的方法都是抽象的。
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
(6)implements,实现父类,子类不可以覆盖父类的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
2.Java extends
(1)在类的声明中,通过关键字extends来创建一个类的子类。
(2)extends是继承父类,只要那个类不是声明为final就能继承,JAVA中不支持多重继承,但是可以用接口 来实现,这样就要用到implements。
public inerface Runner
{
void run ();
}
interface Animal extends Runner
{
void breather ();
}
class Fish implements Animal
{
public void run ()
{
System.out.println("fish is swimming");
}
public void breather()
{
System.out.println("fish is bubbing");
}
}
abstract LandAnimal implements Animal
{
public void breather ()
{
System.out.println("LandAnimal is breathing");
}
}
class Student extends Person implements Runner
{
......
public void run ()
{
System.out.println("the student is running");
}
......
}
这两种实现的具体使用,是要看项目的实际情况,需要实现,不可以修改,用implements。只定义接口需要具体实现,或者可以被修改扩展性好,用extends。