面向对象-接口

来源:互联网 发布:windows services.msc 编辑:程序博客网 时间:2024/06/18 01:12

接口的特点:

/*接口的特点: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();}}

接口的成员特点:

A:成员变量:只能是常量,并且是静态的。

                      默认修饰符:public static final

                      建议:自己手动给出。

public interface Inter {public int num = 10;public final int num2 = 20;//完整版的接口中的变量,不写public static final,也默认是这样的public static final int num3 = 30;}//接口名+Impl这种格式是接口的实现类格式public class InterImpl implements Inter {    }public class InterfaceDemo2 {public static void main(String[] args) {//创建对象Inter i = new InterImpl();System.out.println(i.num); //10System.out.println(i.num2);//20/*i.num = 100;i.num2 = 200;System.out.println(i.num); //报错:无法为最终变量num分配值System.out.println(i.num2);//报错:无法为最终变量num2分配值*/System.out.println(Inter.num); //10System.out.println(Inter.num2);//20}}
B:构造方法:接口没有构造方法。


所有的类都默认继承自一个类:Object。

类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。

所以接口没有构造方法不影响


C:成员方法:只能是抽象方法。

                      默认修饰符:public abstract

                      建议:自己手动给出。


------------------------------------------------------------------------------------------------------------------------------------------------------------

类与类,类与接口,接口与接口的关系:

/*类与类:继承关系,只能单继承,可以多层继承。类与接口:实现关系,可以单实现,也可以多实现。并且还可以在继承一个类的同时实现多个接口。接口与接口:继承关系,可以单继承,也可以多继承。*/interface Father {public abstract void show();}interface Mother {public abstract void show2();}interface Sister extends Father,Mother {//接口与接口,继承关系,可以单继承,也可以多继承}//class Son implements Father,Mother //多实现class Son extends Object implements Father,Mother {//在继承一个类的同时实现多个接口public void show() {System.out.println("show son");}public void show2() {System.out.println("show2 son");}}class InterfaceDemo3 {public static void main(String[] args) {//创建对象Father f = new Son();f.show();//f.show2(); //报错//要想用show2(),向下转型Son s = (Son)f;s.show2();Mother m = new Son();//m.show(); //报错//要想用show(),向下转型Son ss = (Son)m;ss.show(); m.show2();}}
抽象类和接口的区别:开发中一般不记它,但是面试中经常会问到

A:成员区别

    抽象类:

        成员变量:可以变量,也可以常量

        构造方法:有

        成员方法:可以抽象,也可以非抽象

    接口:

        成员变量:只可以常量

        成员方法:只可以抽象

B:关系区别

    类与类

        继承,单继承

    类与接口

        实现,单实现,多实现

    接口与接口

        继承,单继承,多继承       

C:设计理念区别

    抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。

    接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

猫狗案例加入跳高功能分析:

/*猫狗案例,加入跳高的额外功能分析:从具体到抽象猫:姓名,年龄吃饭,睡觉狗:姓名,年龄吃饭,睡觉由于有共性功能,所以,我们抽取出一个父类:动物:姓名,年龄吃饭();睡觉(){}猫:继承自动物狗:继承自动物跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口接口:跳高部分猫:实现跳高部分狗:实现跳高实现;从抽象到具体使用:使用具体类*///定义跳高接口interface Jumpping {//跳高功能public abstract void 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 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 Cat extends Animal {public Cat(){}public Cat(String name,int age) {super(name,age);}public void eat() {System.out.println("猫吃鱼");}}//具体狗类class Dog extends Animal {public Dog(){}public Dog(String name,int age) {super(name,age);}public void eat() {System.out.println("狗吃肉");}}//有跳高功能的猫class JumpCat extends Cat implements Jumpping {public JumpCat() {}public JumpCat(String name,int age) {super(name,age);}public void jump() {System.out.println("跳高猫");}}//有跳高功能的狗class JumpDog extends Dog implements Jumpping {public JumpDog() {}public JumpDog(String name,int age) {super(name,age);}public void jump() {System.out.println("跳高狗");}}class InterfaceTest {public static void main(String[] args) {//定义跳高猫并测试JumpCat jc = new JumpCat();jc.setName("哆啦A梦");jc.setAge(3);System.out.println(jc.getName()+"---"+jc.getAge());jc.eat();jc.sleep();jc.jump();System.out.println("-----------------");JumpCat jc2 = new JumpCat("加菲猫",2);System.out.println(jc2.getName()+"---"+jc2.getAge());jc2.eat();jc2.sleep();jc2.jump();//定义跳高狗并进行测试的事情自己完成。}}
老师学生案例加入抽烟功能分析及代码实现:
/*老师和学生案例,加入抽烟的额外功能分析:从具体到抽象老师:姓名,年龄,吃饭,睡觉学生:姓名,年龄,吃饭,睡觉由于有共性功能,我们提取出一个父类,人类。人类:姓名,年龄吃饭();睡觉(){}抽烟的额外功能不是人、老师、学生一开始就应该具备的,所以,我们把它定义为接口抽烟接口。部分老师抽烟:实现抽烟接口部分学生抽烟:实现抽烟接口实现:从抽象到具体使用:具体*///定义抽烟接口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();//测试老师留给自己练习}}

1 0
原创粉丝点击