什么是接口
接口 用来定义一些扩展功能的;
当一个事物,他本身所具备的属性和功能,我们会定义在这个事物当中,这非常合理
比如这个猫类,我们给他定义了,吃饭,睡觉,抓老鼠的功能,很合理,但是你给猫类中定义一个做算术的功能合理吗?
那么这个做算术的功能,它属于哪个事物,扩展出的功能,我们定义在猫这个事物当中,肯定不合理,但是,部分猫,他想要具备这个功能,我们可以把这个功能,定义到一个接口中,将来,那些事物。想要具备这个做算术的功能,可以实现这个接口
定义接口的语法 interface 接口名
接口和抽象类的区别
抽象类
他是将事物的本身所具备的共性功能向上抽取,但是不给出功能的具体实现,由子类根据自身差异,去做实现
接口
是用来定义一些额外的扩展功能,这些功能也是抽象的。将来那些事物,想要具备这些额外功能,可以去实现这个接口,去重写这个接口中,所定义的所有额外功能
抽象类中,即可以定义抽象方法,也可以定义非抽象方法,接口中只能是抽象方法
抽象类中有构造方法,接口中没有构造方法
抽象类中,即可以定义成员变量,也可以定义常量,接口中全是,公共的静态常量
抽象类:父类,将多个子类的共性功能,向上抽取出来,他并不知道,子类对共性功能的具体实现,所以父类,没有必要给出共性功能的具体实现,只需要给出方法的声明即可,也就是将此方法抽象出来,一旦一个类中有了一个抽象方法,此类必须定义为抽象类
接口:用来定义一些扩展功能,也可以用来定义一些规则,那哪个事物,需要具备这些额外功能,可以实现这个接口
接口和抽象类的区别?
类跟类的关系:继承关系,单继承
类跟接口的关系:实现关系 可以实现多个接口,而且一个类,在继承另一类时,还可以实现多个接口
接口跟接口的关系:继承关系,可以继承多个接口
接口的一些注意事项
接口中的方法,全部是抽象方法,没有非抽象方法;
接口中没有构造方法
接口中的成员变量,都是公共的静态常量
前面有默认修饰符 public static final 可省略不写
接口中的方法都是抽象方法 方法前面有默认修饰符 public abstract 可以省略不写
一个类,可以实现多个接口,实现多个接口,必须重写多个接口中的所有抽象方法
接口跟接口 可以是单继承,也可以是多继承。
JDK1.8之后,接口中可以定义默认方法( default 修饰的方法),可以给出方法的具体实现
案例演示
public class MyTest {
public static void main(String[] args) {
//A:
//动物类:姓名,年龄,吃饭,睡觉。
//动物培训接口:跳高
// 猫继承动物类
//狗继承动物类
// 部分猫继承猫类并实现跳高接口
//部分狗继承狗类并实现跳高接口
//
//通过抽象类测试基本功能。
//通过接口测试扩展功能。
//只测试猫,狗的测试留给学生自己练习
Animal an = new TomCat();
an.name = "汤姆";
an.age = 3;
System.out.println(an.name + "===" + an.age);
an.eat();
an.sleep();
KittyCat kittyCat = new KittyCat();
an = kittyCat;
an.name = "kitty";
an.age = 4;
an.eat();
an.sleep();
JumpInterface jumpInterface = kittyCat;
jumpInterface.jump();
}
}
public interface JumpInterface {
public abstract void jump();
}
public abstract class Animal {
public String name;
public int age;
public abstract void eat();
public abstract void sleep();
}
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("吃鱼");
}
@Override
public void sleep() {
System.out.println("猫白天睡觉");
}
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
@Override
public void sleep() {
System.out.println("狗睡觉");
}
}
public class GaoFeiDog extends Dog implements JumpInterface{
@Override
public void eat() {
System.out.println("高菲狗,爱吃狗粮");
}
@Override
public void jump() {
System.out.println("高菲狗学会了跳高");
}
}
public class KittyCat extends Cat implements JumpInterface{
@Override
public void eat() {
System.out.println("hello kitty猫喜欢吃奶油");
}
@Override
public void sleep() {
System.out.println("kitty 猫不喜欢睡觉");
}
@Override
public void jump() {
System.out.println("kitty猫 经过自己的学习 学会了跳高这个功能");
}
}
public class TomCat extends Cat{
@Override
public void eat() {
System.out.println("tom猫喜欢吃猫粮");
}
@Override
public void sleep() {
System.out.println("tom猫喜欢晚上睡觉");
}
}
public class WangCaiDog extends Dog{
@Override
public void eat() {
System.out.println("旺财喜欢吃素");
}
@Override
public void sleep() {
System.out.println("旺财整天睡觉");
}
}