java 是单继承
为了实现多继承,提出了接口的定义:
格式:
public interface 接口名 {
public static abstract void 名字1();
public static abstract void 名字2();
public static abstract void 名字3();
}
class 类 implements 接口 {
class 类 implements 接口 {
重写接口中方法
}
父类 抽象类: 关键字
abstract
public abstract class Dog {
String name;
int age;
public abstract void eat();
public abstract void run();
}
String name;
int age;
public abstract void eat();
public abstract void run();
}
接口:
public interface Adog {
public static final int last = 100; /*final 关键字 将定义的变量改变为常量*/
public abstract void Acat();
}
public abstract void Acat();
}
子类: 关键字
implements (实现) extends(继承)
public class HaDog extends Dog implements Adog {
public void eat()
{
System.out.println("eat.....");
}
public void run()
{
System.out.println("run.....");
}
public void Acat()
{
System.out.println("Acat.....");
}
public String getName(String _name)
{
this.name = _name;
return this.name;
}
}
public void eat()
{
System.out.println("eat.....");
}
public void run()
{
System.out.println("run.....");
}
public void Acat()
{
System.out.println("Acat.....");
}
public String getName(String _name)
{
this.name = _name;
return this.name;
}
}
调用实例:
public class Tese {
public static void main(String[] args)
{
HaDog d = new HaDog();
d.Acat();
d.eat();
d.run();
String xx = d.getName("xxx");
System.out.println(xx+d.last);
}
}
public static void main(String[] args)
{
HaDog d = new HaDog();
d.Acat();
d.eat();
d.run();
String xx = d.getName("xxx");
System.out.println(xx+d.last);
}
}
通过上面的例子总结接口和抽象类的区别:
相同点:
l 都位于继承的顶端,用于被其他类实现或继承;
l 都不能直接实例化对象;
l 都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
l 抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
l 一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
l 抽象类是这个事物中应该具备的你内容, 继承体系是一种 is..a关系
l 接口是这个事物中的额外内容,继承体系是一种 like..a关系
二者的选用:
l 优先选用接口,尽量少用抽象类;
需要定义子类的行为,又要为子类提供共性功能时才选用抽象