我们就拿猫狗案例来讲,狗一般就是看门,猫一般就是作为宠物,但是现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的。所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能。所以,为了体现事物功能的扩展性,java中就提供了接口来定义这些额外功能,并不给出具体体现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可。
接口特点
1.接口用关键字interface表示
格式:interface 接口名 { }
2.类实现接口用implements表示
格式:class 类名 implements 接口名{ }
package test4_7.jiekou;
//接口中定义的是扩展功能
public interface JumpInterface {
public abstract void jump();
}
3.接口不能实例化
那如何来实例化?按照多态的方式来实例化。
4.接口的子类
可以是抽象类,但是意义不大。
可以是具体类,要重写接口中的所有抽象方法。
接口成员特点
1.成员变量:只能是常量,并且是静态的.默认修饰符:public static final
2.构造方法:接口没有构造方法
3.成员方法:只能是抽象方法。默认修饰符:public abstract
public class Dog extends Animal implements JumpInterface{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
@Override
public void jump() {
System.out.println("狗经过不断练习学会跳高");
}
}
public abstract class Animal {
public abstract void eat();
}
类与类,类与接口,接口与接口之间的关系
1.类与类:
继承关系,只能单继承,可以多层继承
2.类与接口:
实现关系,可以单实现,也可以多实现,并且还可以在继承一个类的同时,实现多个接口。
3.接口与接口:
继承关系,可以单继承,也可以多继承。
抽象类和接口的区别
1.成员区别
抽象类:
成员变量:可以变量,也可以常量,
构造方法:有
成员方法:可以抽象,也可以非抽象
package test4_7;
public abstract class Person {
public String name;
public String age;
public abstract void eat();
public abstract void sleep();
}
package test4_7;
public class Student extends Person {
@Override
public void eat() {
System.out.println("学生爱吃麻辣烫");
}
@Override
public void sleep() {
System.out.println("学生爱白天睡觉");
}
public void fallInLove(){
System.out.println("学生谈恋爱");
}
}
package test4_7;
public class Teacher extends Person{
@Override
public void eat() {
System.out.println("老师爱吃面条");
}
@Override
public void sleep() {
System.out.println("老师一般晚上睡觉");
}
public void teach(){
System.out.println("老师教书");
}
}
接口:
成员变量:只可以常量
成员方法:只可以抽象
2.关系区别:
类与类:继承,单继承
类与接口:实现,单实现,多实现
接口与接口:继承,单继承,多继承
3.设计理念的区别
抽象类,被继承体现的是“is a ”的关系。抽象类中定义的是该继承体系的共性功能。
接口:被实现体现的是“like a ”的关系,接口中定义的是该继承体系的扩展功能。