Java——接口2(类和接口的关系,抽象类和接口的区别)

类和接口的关系

  • 类和类的关系
    继承关系,只能单继承,但是可以多层继承
  • 类和接口的关系
    实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
  • 接口和接口的关系
    继承关系,可以单继承,也可以多继承
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("——————————");
	}
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值