026、接口

来源:互联网 发布:苹果mac破解软件下载 编辑:程序博客网 时间:2024/06/05 07:10
一、接口概述继续回到我们的猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不。但是,现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的,对不。所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能。所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可。二、接口的特点:A:接口用关键字interface表示interface 接口名 {}B:类实现接口用implements表示class 类名 implements 接口名 {}C:接口不能实例化那么,接口如何实例化呢?按照多态的方式来实例化。D:接口的子类a:可以是抽象类。但是意义不大。b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)由此可见:A:具体类多态(几乎没有)B:抽象类多态(常用)C:接口多态(最常用)三、案例//定义动物培训接口interface AnimalTrain {public abstract void jump();}//抽象类实现接口abstract class Dog implements AnimalTrain {}//具体类实现接口class Cat implements AnimalTrain {public void jump() {System.out.println("猫可以跳高了");}}class InterfaceDemo {public static void main(String[] args) {//AnimalTrain是抽象的; 无法实例化//AnimalTrain at = new AnimalTrain();//at.jump();AnimalTrain at = new Cat();at.jump();}}四、接口成员特点成员变量;只能是常量,并且是静态的。默认修饰符:public static final建议:自己手动给出。构造方法:接口没有构造方法。成员方法:只能是抽象方法。默认修饰符:public abstract建议:自己手动给出。所有的类都默认继承自一个类:Object。类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。五、案例interface Inter {public int num = 10;public final int num2 = 20;public static final int num3 = 30;//错误: 需要<标识符>//public Inter() {}//接口方法不能带有主体//public void show() {}//abstract void show(); //默认publicpublic void show(); //默认abstract}//接口名+Impl这种格式是接口的实现类格式/*class InterImpl implements Inter {public InterImpl() {super();}}*/class InterImpl extends Object implements Inter {public InterImpl() {super();}public void show() {}}//测试类class InterfaceDemo2 {public static void main(String[] args) {//创建对象Inter i = new InterImpl();System.out.println(i.num);System.out.println(i.num2);//i.num = 100;//i.num2 = 200;//System.out.println(i.num); //无法为最终变量num分配值//System.out.println(i.num2);//无法为最终变量num2分配值System.out.println(Inter.num);System.out.println(Inter.num2);System.out.println("--------------");}}六、类与类,类与接口以及接口与接口的关系类与类:继承关系,只能单继承,可以多层继承。类与接口:实现关系,可以单实现,也可以多实现。并且还可以在继承一个类的同时实现多个接口。接口与接口:继承关系,可以单继承,也可以多继承。七、抽象类和接口的区别:A:成员区别抽象类:成员变量:可以变量,也可以常量构造方法:有成员方法:可以抽象,也可以非抽象接口:成员变量:只可以常量成员方法:只可以抽象B:关系区别类与类继承,单继承类与接口实现,单实现,多实现接口与接口继承,单继承,多继承C:设计理念区别抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。八、案例/*老师和学生案例,加入抽烟的额外功能分析:从具体到抽象老师:姓名,年龄,吃饭,睡觉学生:姓名,年龄,吃饭,睡觉由于有共性功能,我们提取出一个父类,人类。人类:姓名,年龄吃饭();睡觉(){}抽烟的额外功能不是人或者老师,或者学生一开始就应该具备的,所以,我们把它定义为接口属于扩展功能抽烟接口。部分老师抽烟:实现抽烟接口部分学生抽烟:实现抽烟接口实现:从抽象到具体使用:具体*///定义抽烟接口interface Smoking {//抽烟的抽象方法public abstract void smoke();}//定义抽象人类abstract class Person {//姓名private String name;//年龄private int age;public Person() {}public Person(String name,int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//吃饭();public abstract void eat();//睡觉(){}public void sleep() {System.out.println("睡觉觉了");}}//具体老师类class Teacher extends Person {public Teacher() {}public Teacher(String name,int age) {super(name,age);}public void eat() {System.out.println("吃大白菜");}}//具体学生类class Student extends Person {public Student() {}public Student(String name,int age) {super(name,age);}public void eat() {System.out.println("吃红烧肉");}}//抽烟的老师class SmokingTeacher extends Teacher implements Smoking {public SmokingTeacher() {}public SmokingTeacher(String name,int age) {super(name,age);}public void smoke() {System.out.println("抽烟的老师");}}//抽烟的学生class SmokingStudent extends Student implements Smoking {public SmokingStudent() {}public SmokingStudent(String name,int age) {super(name,age);}public void smoke() {System.out.println("抽烟的学生");}}class InterfaceTest2 {public static void main(String[] args) {//测试学生SmokingStudent ss = new SmokingStudent();ss.setName("林青霞");ss.setAge(27);System.out.println(ss.getName()+"---"+ss.getAge());ss.eat();ss.sleep();ss.smoke();System.out.println("-------------------");SmokingStudent ss2 = new SmokingStudent("刘意",30);System.out.println(ss2.getName()+"---"+ss2.getAge());ss2.eat();ss2.sleep();ss2.smoke();//测试老师留给自己练习}}


原创粉丝点击