接口(interface)
接口的概述
从狭义的角度讲就是指java中的interface
从广义的角度讲就是对外提供规则的都是接口
接口的特点
1,接口用关键字interface表示:
interface 接口名 {}
2,类实现接口用implements表示:
class 类名 implements 接口名 {}
3,接口不能被实例化,因为调用抽象方法没有意义,
可以按照多态的方式实例化
接口的子类
1,可以是抽象类。但是意义不大
2,可以是具体类。要重写接口中的所有抽象方法
注:接口中的方法都是抽象的
接口成员特点:
成员变量:
1,成员变量只能是常量,并且是静态且公共的
2,默认修饰符:public static final,三个关键字可以互相交换位置
3,构造方法:接口没有构造方法
成员方法:
1,只能是抽象方法
2,默认修饰符:public abstract
注:一个类不写继承任何类,默认继承Object类
继承格式:
class Demo /*extends Object*/ implements Inter { }
类与类、类与接口、接口与接口的关系:
类与类:
继承关系,只能单继承,可以多层继承
类与接口:
1,实现关系,可以单实现,也可以多实现
2,并且还可以在继承一个类的同时实现多个接口
如:
class Demo extends Object implements InterA,InterB {}
注意:
class Demo extends Object implements InterA,implement InterB {}
这样是非法的,不被允许的
接口与接口:
继承关系,可以单继承,也可以多继承
抽象类和接口的区别
成员区别
抽象类:
成员变量:可以变了,也可以常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以常量
成员方法:只可以抽象
关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承
设计理念区别
抽象类:被继承体现的是:“is a”的关系。抽象类中定义的是该继承体系的共性功能。
接口:被实现体现的是:“like a”的关系。接口中定义的是该继承体系的扩展功能。
1 class Test_Animal { 2 public static void main(String[] args){ 3 Cat c = new Cat("小白",8); 4 c.eat(); 5 c.sleep(); 6 7 JumpCat js = new JumpCat("跳高猫",9); 8 jc.eat(); 9 jc.sleep(); 10 jc.jump(); 11 } 12 13 abstract class Animal { 14 private String name; // 姓名 15 private int age; //年龄 16 17 public Animal(){} // 空参构造 18 19 public Animal(String name,int age){ //有参构造 20 21 this.name = name; 22 this.age = age; 23 } 24 25 public void setName(String name){ //设置姓名 26 this.name = name; 27 } 28 29 public String getName(){ // 获取姓名 30 return name; 31 } 32 33 public void setAge(int age){ //设置年龄 34 this.age = age; 35 } 36 37 public String getAge(){ //获取年龄 38 return age; 39 } 40 41 public abstract void eat(); //吃饭 42 43 public abstract void sleep(); //睡觉 44 45 46 } 47 interface Jumping { //跳高接口 48 public void jump(){}; 49 } 50 class Cat extends Animal 51 { 52 public Cat(){} //空参构造 53 54 public Cat(String name,int age){ //有参构造 55 super(name,age); 56 } 57 58 public void eat(){ 59 System.out.println("猫吃鱼"); 60 } 61 public void sleep(){ 62 System.out.println("躺着睡"); 63 } 64 65 } 66 67 class JumpCat extends Cat implements Jumping { 68 public void jump(){ 69 70 public JumpCat(){} //空参构造 71 72 public JumpCat(String name,int age){ //有参构造 73 super(name,age); 74 } 75 System.out.println("猫跳高"); 76 } 77 }