类和接口的关系
- 类和类的关系
继承关系,只能单继承,但是可以多层继承 - 类和接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口 - 接口和接口的关系
继承关系,可以单继承,也可以多继承
public interface Inter1 {
}
public interface Inter2 {
}
//接口和接口,可以继承,并且可以继承多个
public interface Inter3 extends Inter1,Inter2{
}
//类可以继承一个类,实现多个接口
public class InterClass extends Object implements Inter1,Inter2,Inter3{
}
抽象类和接口的区别
- 成员区别
抽象类——变量,常量;有构造方法;有抽象方法,也有非抽象方法
接口——常量;抽象方法 - 关系区别
类与类——继承,单继承
类与接口——实现,可以单实现,也可以多实现
接口与接口——继承,单继承,多继承 - 设计理念区别
抽象类——对类抽象,包括属性,行为
接口——对行为抽象,主要是行为
门和警报的例子:
门:都有open和close两个动作,而报警是个别门才有的功能,这时,可以分别使用抽象类和接口来定义
//抽象类
public abstract class Door {
public abstract void open();
public abstract void close();
}
//接口
public interface Alram {
void alram();
}
public class AlramDoor extends Door implements Alram {
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("开门");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("关门");
}
@Override
public void alram() {
// TODO Auto-generated method stub
System.out.println("报警");
}
}
抽象类是对事物的抽象,接口是对行为的抽象
案例:运动员和教练
需求:我们现在有乒乓球运动员和篮球运动员,乒乓球教练和篮球教练。为了出国交流,跟乒乓球相关的人员都需要学习英语。请用所学知识分析,这个案例中有哪些具体类,哪些抽象类,哪些接口,并用代码实现
分析:从具体到抽象
实现:从抽象到具体
使用:使用的是具体的类的对象
//抽象类 人类
public abstract class People {
String name;
int age;
// 吃饭
public abstract void eat();
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 People() {
super();
}
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
//抽象类 运动员类
public abstract class Athletes extends People {
// 学习
public abstract void study();
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("运动员吃饭");
}
public Athletes() {
}
public Athletes(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
//抽象类 教练类
public abstract class Coach extends People {
public abstract void teach();
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("教练吃饭");
}
public Coach() {
}
public Coach(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
//接口 学英语
public interface English {
void english();
}
//乒乓球运动员
public class PPA extends Athletes implements English {
@Override
public void study() {
// TODO Auto-generated method stub
System.out.println("学习乒乓球");
}
@Override
public void english() {
// TODO Auto-generated method stub
System.out.println("学习英语");
}
@Override
public void eat() {
// TODO Auto-generated method stub
super.eat();
}
public PPA() {
}
public PPA(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
//乒乓球教练
public class PPC extends Coach implements English {
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println("教乒乓球");
}
@Override
public void english() {
// TODO Auto-generated method stub
System.out.println("学习英语");
}
@Override
public void eat() {
// TODO Auto-generated method stub
super.eat();
}
public PPC() {
}
public PPC(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
//篮球运动员
public class BA extends Athletes {
@Override
public void study() {
// TODO Auto-generated method stub
System.out.println("学习篮球");
}
@Override
public void eat() {
// TODO Auto-generated method stub
super.eat();
}
public BA() {
}
public BA(String name, int age) {
super();
this.age = age;
this.name = name;
}
}
//篮球教练
public class BC extends Coach {
@Override
public void teach() {
// TODO Auto-generated method stub
System.out.println("教篮球");
}
@Override
public void eat() {
// TODO Auto-generated method stub
super.eat();
}
public BC() {
}
public BC(String name, int age) {
super();
this.age = age;
this.name = name;
}
}
//测试类
public class Demo {
public static void main(String[] args) {
PPA p = new PPA("小白", 16);
System.out.println(p.getName() + "," + p.getAge());
p.eat();
p.study();
p.english();
System.out.println("——————————");
PPC pc = new PPC("大白", 44);
System.out.println(pc.getName() + "," + pc.getAge());
pc.eat();
pc.teach();
pc.english();
System.out.println("——————————");
BA b = new BA("小黑", 14);
System.out.println(b.getName() + "," + b.getAge());
b.eat();
b.study();
System.out.println("——————————");
BC bc = new BC("大黑", 54);
System.out.println(bc.getName() + "," + bc.getAge());
bc.eat();
bc.teach();
System.out.println("——————————");
}
}
运行结果: