学Java第三十五天------接口
注意:
1、接口是对行为的抽象,比如游泳这个接口,就包含青蛙类、狗类、学生类、老师类;再比如,搬家这个行为(接口),就可以包含三轮车、搬家公司、人肩扛等等
2、抽象类是对一类事物的抽象
一、接口的定义和使用
二、接口代码练习
1、动物-----父类
package com.interfaceapp.demo1;public 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();
}
2、游泳规则------接口
package com.interfaceapp.demo1;public interface Swim {public abstract void swim();
}
3、青蛙------动物子类-------游泳接口
package com.interfaceapp.demo1;public class Frog extends Animal implements Swim{public Frog() {}public Frog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("青蛙吃虫子");}@Overridepublic void swim() {System.out.println("蛙泳");}
}
4、狗--------动物子类--------游泳接口
package com.interfaceapp.demo1;public class Dog extends Animal implements Swim{public Dog() {}public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("狗啃骨头");}@Overridepublic void swim() {System.out.println("狗刨");}
}
5、兔子--------动物子类
package com.interfaceapp.demo1;public class Rabbit extends Animal{public Rabbit() {}public Rabbit(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("兔子吃胡萝卜");}
}
6、测试类
package com.interfaceapp.demo1;public class Test {public static void main(String[] args) {Dog d=new Dog("小黑",2);System.out.println(d.getAge()+","+d.getName());d.eat();d.swim();Rabbit r=new Rabbit("xiaobai",3);System.out.println(r.getAge()+","+r.getName());r.eat();}
}
三、小总结:
1、先写父类(所有子类都有的行为写成抽象方法,父类写成抽象类)和接口(只有两个及以上并且不是全部子类会有这个接口,接口里的方法要写成抽象方法)。
2、写子类,看是否继承父类,是否实现接口,继承或者实现,都要重写抽象方法。
3、子类也要写构造函数。
四、接口中成员的特点
代码示例:
接口:
package com.interfaceapp.demo2;public interface Inter {public static final int a=10;//接口里面只能有常量,且该常量所有地方都能使用,用接口.常量名调用public abstract void method();}
一个类,该类实现上面的接口:
package com.interfaceapp.demo2;public class InterF implements Inter {@Overridepublic void method() {System.out.println("method");}
}
测试:
package com.interfaceapp.demo2;public class Test {public static void main(String[] args) {InterF i=new InterF();i.method();//methodSystem.out.println(Inter.a);//10}
}
心得:我觉得接口就是:不是所有子类都有共同的某个方法,只有某几个有共同的方法,所以就把这个方法抽象到接口中,当子类需要这个方法时,就调用接口中的方法即可。
五、接口和类之间的关系
心得:
类实现了多个接口,那就要重写所有接口的所有抽象方法
接口可以继承接口,如果一个类实现了一个体系的最下面的接口,那这个类就要重写这个子接口以及上面所有接口的所有抽象方法。
如果要调用这些方法,是要先在一个类中实现这些接口中的抽象方法,之后创建该类的对象,用该对象来调用这些方法。
六、接口和抽象类的综合练习
1、画图
注意:有多种方法,可以多画几次,看哪个条理更清晰
2、写代码
(1)人-----顶父类----也写成抽象类
因为创建一个父类的对象是没有意义的,所以变成抽象类,就不会创建对象了
package com.interfaceapp.demo3;public 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;}}
(2)运动员类-----继承父类-----虚拟类,学()是虚拟方法
package com.interfaceapp.demo3;public abstract class Sporter extends Person{public Sporter() {}public Sporter(String name, int age) {super(name, age);}public abstract void learn();
}
(3)教练类-----继承父类-----虚拟类,教()是虚拟方法
package com.interfaceapp.demo3;public abstract class Coach extends Person{public Coach() {}public Coach(String name, int age) {super(name, age);}public abstract void teach();
}
(4)说英语接口类
package com.interfaceapp.demo3;public interface SpeakEnglish {public abstract void speakEnglish();
}
(5)乒乓球运动员类------继承运动员类-----实现说英语接口
package com.interfaceapp.demo3;public class PingPangballSptr extends Sporter implements SpeakEnglish {public PingPangballSptr() {}public PingPangballSptr(String name, int age) {super(name, age);}@Overridepublic void speakEnglish() {System.out.println("乒乓球运动员说英语");}@Overridepublic void learn() {System.out.println("乒乓球运动员学习乒乓球");}
}
(6)乒乓球教练类------继承教练类-----实现说英语接口
package com.interfaceapp.demo3;public class PingPangCoach extends Coach implements SpeakEnglish{public PingPangCoach() {}public PingPangCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("乒乓球教练教乒乓球");}@Overridepublic void speakEnglish() {System.out.println("乒乓球教练说英语");}
}
(7)篮球运动员类------继承运动员类
package com.interfaceapp.demo3;public class BasketballSptr extends Sporter{public BasketballSptr() {}public BasketballSptr(String name, int age) {super(name, age);}@Overridepublic void learn() {System.out.println("篮球运动员学篮球");}
}
(8)篮球教练类------继承教练类
package com.interfaceapp.demo3;public class BasketballCoach extends Coach{public BasketballCoach() {}public BasketballCoach(String name, int age) {super(name, age);}@Overridepublic void teach() {System.out.println("篮球教练教篮球");}
}
总结:
所有子类都有的共同行为,抽取到父类成为抽象方法,若只有几个子类共有的行为,就抽取到一个接口中。