java047接口的优点和与抽象类的区别,运动员案例
1.接口collection是java中集合的根接口,或者可以说是最顶层的父接口
2.接口的优点:
a.类与接口的关系,实现关系,而且是多实现,一个类可以实现多个接口。 类与类之间是继承关系,java中的继承是单一继承,一个类只能有一个父类,而接口的出现打破了继承的局限性。
b.对外提供规则和规范
c.降低了程序的耦合性提高了开发效果,可以实现模块化开发,定义好规则,每个人实现自己的模块。
3.接口和抽象类的区别
共性:不断地抽取,抽取出抽象的概念。
区别:a.类与接口是实现关系,一个类可以实现多个接口,而且要把接口的抽象方法全部实现。
类与抽象类之间是继承关系,单一继承,一个类只能有一个父类,但是java类还有一个特点就是多层继承。
b.接口和抽象类之间成员的区别
成员变量:
抽象类可以有成员变量,也可以有常量
接口只能有常量
成员方法:
抽象类可以有抽象方法,也可以有非抽象方法
接口只能有抽象方法,而且方法只有默认修饰符piblic abstract 构造方法。
抽象类有构造方法,接口没有。
4.运动员案例练习
篮球运动员和教练;乒乓球运动员和教练;篮球运动员和教练要出国访问,需要学习英语,请根据所学知识,分析哪些是类,哪些是抽象类,及哪些是接口。
分析:
由下至上分析;不断向上抽取共性。
实现:
由上至下,先实现共性。
使用:
使用具体的子类。
java047接口的优点和与抽象类的区别,运动员案例代码实现:
package 接口player;
public class PleyerTest {
public static void main(String[] args) {
//创建乒乓球运动员对象
PingPangPlayer ppp = new PingPangPlayer();
ppp.name="张继科";
ppp.age=28;
ppp.gender="男";
System.out.println("乒乓球运动员"+":"+ppp.getName()+" "+ppp.getAge()+"岁 "+ppp.getGender());
ppp.sleep();
ppp.study();
ppp.eat();
System.out.println("---------");
//创建篮球运动员对象
BasketballPlayer bbp = new BasketballPlayer();
ppp.name="姚明";
ppp.age=45;
ppp.gender="男";
System.out.println("篮球运动员"+":"+ppp.getName()+" "+ppp.getAge()+"岁 "+ppp.getGender());
ppp.sleep();
ppp.study();
ppp.eat();
}
}
class person{
String name;
int age;
String gender;
public person(){
}
public person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
//学英语
interface studyEnglish{
public abstract void speak();
}
//运动员
abstract class player extends person{
public abstract void study();
}
//教练
abstract class coach extends person{
public abstract void teach();
}
//乒乓球运动员
class PingPangPlayer extends player{
@Override
public void study() {
System.out.println("学习抽球");
}
}
//篮球运动员
class BasketballPlayer extends player implements studyEnglish{
@Override
public void study() {
System.out.println("学习扣篮");
}
@Override
public void speak() {
System.out.println("说英语");
}
}
//乒乓球教练
class PingPangcoach extends coach{
@Override
public void teach() {
System.out.println("教抽球技巧");
}
}
//篮球教练
class Basketballcoach extends coach implements studyEnglish{
@Override
public void teach() {
System.out.println("教扣篮技巧");
}
@Override
public void speak() {
System.out.println("说英语");
}
}