一.接口的概述及特点
- 接口的概述:动物类中的具体的动物:猫和狗,有时候会具有额外的动作(跳高,计算等等…),这些动作不能定义到具体类中,所以java针对这种情况,就提供了一个关键字:interface(接口)
接口的格式:
interface 接口名{
}接口的特点:
- 接口里面定义的方法只能是抽象方法
- 接口中没有构造方法
- 接口的子类和接口的关系:实现(implements)
- 接口不能实例化,需要使用接口的子类进行实例化(接口多态)
//动物类
abstract class Animal{
}
//接口:某些动物通过培训掌握技能
interface Jump{
public abstract void jump();
}
//狗类
class Dog extends Animal{
}
//某些狗会跳跃
class JumpDog extends Dog implements Jump{
public void jump(){
System.out.println("跳高");
}
}
//测试类
public class Demo1 {
public static void main(String[] args){
//利用接口多态进行实例化
Jump a = new JumpDog();
a.jump();
//可以使用具体的类:实现接口的这个子类是功能最多的
JumpDog b = new JumpDog();
b.jump();
}
}
二.接口和抽象类的区别
1.成员区别:
名称 | 成员变量 | 成员方法 | 构造方法 |
---|---|---|---|
接口 | 常量 | 抽象方法 | 没有构造方法 |
抽象类 | 常量,变量 | 抽象和非抽象方法 | 有构造方法 |
接口:
成员变量默认修饰符:public static final(常量)
成员方法默认修饰符:public abstract(抽象方法)
2.关系的区别:
名称 | 关系 |
---|---|
类与类 | 继承(extends),可以单继承,不可以多继承 |
接口与接口 | 继承(extends),可以单继承,也可以多继承 |
类与接口 | 实现(implements),可以单实现,也可以多实现 |
3.设计理念的区别:
名称 | 理念 |
---|---|
继承 | 抽象类被继承体现的是:is a的关系,共性功能 |
接口 | 接口被实现体现的是:like a的关系,扩展功能 |
三.接口练习
- 教练和运动员案例:
乒乓球运动员和篮球运动员
乒乓球教练和篮球教练
为了出国交流,跟乒乓球相关的人员都需要学习英请用所学知识:分析,这个案例中有哪些抽象类,哪些接口,哪些具体类
分析:
人类:
public abstract class Person {
private String name;
private int age;
//无参构造
public Person() {
}
//有参构造
public Person(String name, int age) {
super();
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 void sleep(){
System.out.println("睡觉");
}
public abstract void eat();
}
运动员类:
public abstract class Player extends Person{
//无参构造
public Player() {
}
//有参构造
public Player(String name, int age) {
super(name, age);
}
public void eat(){
System.out.println("吃营养餐");
}
public abstract void study();
}
教练类:
//教练类
public abstract class Coach extends Person{
//无参构造
public Coach() {
}
//有参构造
public Coach(String name, int age) {
super(name, age);
}
public void eat(){
System.out.println("吃饭");
}
public abstract void teach();
}
接口:
public interface StudyEnglish {
public abstract void SpeakEnglish();
}
乒乓球运动员类:
public class PingpangPlayer extends Player implements StudyEnglish{
public PingpangPlayer() {
}
public PingpangPlayer(String name, int age) {
super(name, age);
}
public void study(){
System.out.println("打乒乓球");
}
public void SpeakEnglish(){
System.out.println("学习英语");
}
}
篮球运动员类:
public class BasketballPlayer extends Player{
public BasketballPlayer() {
}
public BasketballPlayer(String name, int age) {
super(name, age);
}
public void study(){
System.out.println("打乒乓球");
}
}
乒乓球教练类:
public class PingpangCoach extends Coach implements StudyEnglish{
public PingpangCoach() {
}
public PingpangCoach(String name, int age) {
super(name, age);
}
public void teach(){
System.out.println("教打乒乓球");
}
public void SpeakEnglish(){
System.out.println("学习英语");
}
}
篮球教练类:
public class BasketballCoach extends Coach {
public BasketballCoach() {
}
public BasketballCoach(String name, int age) {
super(name, age);
}
public void teach(){
System.out.println("教打篮球");
}
}