接口
接口的概述及其特点
接口的概述
接口类似于类,但是与类相比,有两个原则必须遵守,这两个原则也是区别接口和类的关键:
接口中的成员只能是公有、静态、常变量,即,必须拥有public、static和final联合属性关键字;
接口中的方法只能是公有、抽象方法,即,必须拥有public和abstract联合属性关键字。
****代码:下面两段代码本质上是一样的
public interface Test1 {
int data = 20;//编译系统自动拥有
void show();
}
接口的特点
A:接口用关键字interface表示格式:interface接口名{}
B:类实现接口用implements表示格式:class类名implements接口名{}
C:接口不能实例化
按照多态的方式来实例化。
D:接口的子类:实现接口的类,必须实现接口所规定的的抽象方法!否则,该类就是抽象类!
a:可以是抽象类。但是意义不大。
b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
接口的成员特点
A:接口成员特点
a:成员变量:只能是常量,并且是静态的。
默认修饰符:publicstaticfinal
建议:自己手动给出。
b:构造方法:接口没有构造方法。
c:成员方法:只能是抽象方法。
默认修饰符:publicabstract
类与类,类与接口,接口与接口的关系
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
抽象类和接口的区别
A:成员区别
a:抽象类:
成员变量:可以是变量,也可以是常量
构造方法:有
成员方法:可以是抽象,也可以是非抽象
b:接口:
成员变量:只可以是常量
成员方法:只可以是抽象
B:关系区别
a:类与类
继承,单继承
b:类与接口
实现,单实现,多实现
c:接口与接口
继承,单继承,多继承
C:设计理念区别
抽象类被继承体现的是:”isa”的关系。抽象类中定义的是该继承体系的共性功能。
接口被实现体现的是:”likea”的关系。接口中定义的是该继承体系的扩展功能。
例子
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 Jiafei extends Cat implements JumpInteface {
@Override
public void eat() {
System.out.println('加菲猫吃猫粮');
}
@Override
public void sleep() {
System.out.println('加菲猫想睡就睡');
}
@Override
public void jump() {
System.out.println('加菲猫学会了跳高');
}
}
public class Fatorange extends Cat{
@Override
public void eat() {
System.out.println('猫吃小鱼干');
}
@Override
public void sleep() {
System.out.println('胖橘白天睡觉');
}
public void catchMouse(){
System.out.println('胖橘抓老鼠');
}
}
public class Wangcai extends Dog {
@Override
public void eat() {
System.out.println('旺财爱吃骨头');
}
@Override
public void sleep() {
System.out.println('旺财天天睡觉');
}
public void lookDoor(){
System.out.println('旺财看门');
}
}
import org.westos.demo.JumpInteface;
public class Bruse extends Dog implements JumpInteface {
@Override
public void eat() {
System.out.println('布鲁斯吃牛排');
}
@Override
public void sleep() {
System.out.println('布鲁斯睡沙发');
}
public void watchTV(){
System.out.println('看电视');
}
@Override
public void jump() {
System.out.println('布鲁斯学会了跳高');
}
}
public class MyTest {
public static void main(String[] args) {
/* A:
案例演示
动物类:姓名,年龄,吃饭,睡觉。
动物培训接口:跳高
猫继承动物类
狗继承动物类
部分猫继承猫类并实现跳高接口
部分狗继承狗类并实现跳高接口*/
Wangcai wc = new Wangcai();
Animal an = wc;
an.name = '旺财';
an.age = 20;
System.out.println(an.name);
System.out.println(an.age);
an.sleep();
an.eat();
((Wangcai) an).lookDoor();
Bruse bls = new Bruse();
an=bls;
an.name = '布鲁斯';
an.age = 58;
System.out.println(an.name);
System.out.println(an.age);
an.eat();
an.sleep();
JumpInteface jumpInteface= bls;
jumpInteface.jump();
Fatorange fo = new Fatorange();
Animal an = fo;
an.name = '胖橘';
an.age = 23;
System.out.println(an.name);
System.out.println(an.age);
an.sleep();
an.eat();
((Fatorange) an).catchMouse();
Jiafei jf = new Jiafei();
an=jf;
an.name = '加菲';
an.age = 33;
System.out.println(an.name);
System.out.println(an.age);
an.eat();
an.sleep();
JumpInteface jumpInteface = jf;
jumpInteface.jump();
}
}
以上的例子,不仅运用了类的继承、方法的重写和接口的继承,
还使用了如何用接口来实例化(多态实例化)。
希望大家把以上代码亲自敲一遍,深刻理解接口中的jump()方法,
将此方法与父类中的eat()和sleep()两个方法进行对比,
找到接口与类的不同点与相似点!
文章为作者独立观点,不代表观点