接口
接口
1.接口的概述及其特点
如果一个抽象类的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口----来自 java基础入门.
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
一切事物均有功能,即一切事物均有接口。
谁想使用具备这个功能就去实现这个接口.
举个例子:
狗
所有狗都有共性,性别,年龄,睡觉,吃饭-----建议创建成抽象类
部分狗:会数数------这种扩展的----建议创建成接口
1) 接口特点
a:接口用关键字interface表示
* interface 接口名 {}(接口里面可以定义方法,都是抽象的)
b:类实现接口用implements(实现)表示
* class 类名 implements 接口名 {}
接口中都是抽象方法,需要子类去重写
c:接口不能实例化,因为调用抽象方法没有意义(利用多态实例化)
d:接口的子类
(1)可以是抽象类(可以不重写方法)。但是意义不大。
(2)可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
注意1:接口不是被继承的,而是被实现的,但是也属于父类,父类引用指向子类对象.
注意2: 子类:有构造方法
Public Demo() {
Super();(默认有)
}
接口是干爹,有亲爹Class Demo extends object impolements Inter() {}
子类默认继承object的,super访问的是object里面的构造方法,一个类不写继承任何类,默认继承object.
2.接口的成员特点
接口是对外暴露的原则
1) 接口成员特点
因为接口仅仅是定义需要具备哪些功能,无需且不能写出具体内容。为了限制接口不被具体实现,其中的成员都是有固定修饰符的,声明的修饰符不能与固定修饰符冲突。接口中的成员是有固定修饰符的,如果没有写,也会自动加入.
a.成员变量只能是常量,并且是静态的并公共的。(静态的可以类名.或者接口.调用的)
默认修饰符:public static final(没顺序)三个关键字可以互相交换位置
Int num = 10;
b.构造方法:接口没有构造方法。
c.成员方法:只能是抽象方法。(接口中不能定义非抽象方法)
如void print();
默认修饰符:public abstract
建议:自己手动给出。方法修饰符为:public abstract(所以依据方法重写的访问权限注意事项,重写接口方法时,必须使用public)
注意:当一个类实现了接口时,必须实现其所有的方法,否则这个类会保留一些抽象方法,此时,该类包含了抽象方法,便必须定义为一个抽象类。
接口与父类的功能可以重复,均代表要具备某种功能,并不冲突。一实现,父类和接口的方法都实现了.
定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件。这点可以让我们将接口看做是一种只包含了功能声明的特殊类。
3.抽象类和接口的区别
1) 成员区别

2) 关系区别

3) 设计理念区别
a.抽象类 被继承体现的是:"is a"的关系。抽象类中定义的是该继承体系的共性功能。
b.接口 被实现体现的是:"like a"的关系。接口中定义的是该继承体系的扩展功能。
对事物本质的抽象用抽象类,对事物功能的扩展用接口
4.类与类,类与接口,接口与接口的关系
1) 类与类:
继承关系,只能单继承,可以多层继承。
2) 类与接口
实现关系,可以单实现,也可以多实现。
class Demo extends object implements interA,interB
多实现,没有具体的方法体,所以可以多实现,重写可以都重写
并且还可以在继承一个类的同时实现多个接口。
-
Interface InterA {
-
Public abstract void printA();
-
}
-
Interface InterB{
-
Public abstract void printA();
-
}
-
class Demo implements InterA,InterB {
-
Public abstract void printA() {
-
System.out.println("PrintA") //重写一个相当于都给重写了
-
}
-
}
3) 接口与接口:
* 继承关系,可以单继承,也可以多继承。
Interface InterC extends InterB,InterA
-
//class Demo implements InterA,implements InterB { //这么做不允许是非法的
5.猫狗案例加入跳高功能分析及其代码实现
-
class bj09_20 {
-
public static void main(String[] args) {
-
Cat c = new Cat("加菲",8); //创建对象
-
c.eat();
-
c.sleep();
-
-
JumpCat jc = new JumpCat("跳高猫",3);
-
System.out.println("Hello World!");
-
jc.eat();
-
jc.sleep();
-
jc.jump();
-
}
-
}
-
/*
-
* 动物类:姓名,年龄,吃饭,睡觉。//动物的共性功能,如何做不明确,定义成抽象类
-
* 猫和狗
-
* 动物培训接口:跳高 //某些动物具备的,扩展功能,做成接口
-
*/
-
abstract class Animal {
-
//成员变量
-
private String name; //姓名
-
private int age; //年龄
-
//构造方法
-
public Animal() {} //空参构造
-
public Animal(String name,int age) { //有参构造
-
this.name = name;
-
this.age = age;
-
}
-
//成员方法
-
public void setName(String name) { //设置姓名
-
this.name = name;
-
}
-
public String getName() { //获取姓名
-
return name;
-
}
-
-
public void setAge(int age) { //设置年龄
-
this.age = age;
-
}
-
public int getAge() { //获取姓名
-
return age;
-
}
-
-
//吃饭睡觉抽象的,抽象方法,必须在接口或抽象类中
-
public abstract void eat(); //吃饭
-
public abstract void sleep(); //睡觉
-
}
-
//跳高接口
-
interface Jumping {
-
public void jump();
-
}
-
class Cat extends Animal { //不是所有的猫都跳高,所以不要接接口
-
public Cat() {}; //空参构造
-
public Cat(String name,int age) { //有参构造
-
super(name,age);
-
}
-
-
public void eat() {
-
System.out.println("猫吃鱼");
-
}
-
public void sleep() {
-
System.out.println("侧着睡");
-
}
-
}
-
class JumpCat extends Cat implements Jumping{ //JumpCat继承Cat,实现接口Jumping
-
public JumpCat() {} //空参构造
-
public JumpCat(String name,int age) { //有参构造
-
super(name,age);
-
}
-
-
public void jump() {
-
System.out.println("猫跳高");
-
}
-
//想要用有参构造创建对象JumpCat,需在JumpCat里面写有参构造

浙公网安备 33010602011771号