类与接口的关系

1:类实现接口implements,可以多实现,还可以在继承一个类的同时实现多个接口
2:接口可以继承单个或者多个接口

抽象类与接口的区别

1:成员区别

  • 抽象类:变量,常量;有构造方法但是要通过子类实例化;有抽象方法,也有非抽象方法。
  • 接口:常量默认public static final;抽象方法默认public abstract
    2:设计理念
  • 抽象类:对类抽象,包括属性,行为
  • 接口:对行为抽象
    抽象类实现事物基础实现的功能(共性),接口实现特殊功能
    1
    2
    3
    public interface SpeakEnglish {
    void speak();
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public abstract class Person {
    private String name;
    private int 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 Person() {
    super();
    // TODO Auto-generated constructor stub
    }
    public Person(String name, int age) {
    super();
    this.name = name;
    this.age = age;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public abstract class Player extends Person {

    abstract void study();

    public Player() {
    super();
    // TODO Auto-generated constructor stub
    }

    public Player(String name, int age) {
    super(name, age);
    // TODO Auto-generated constructor stub
    }

    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class BasketballPlayer extends Player implements SpeakEnglish {

    @Override
    public void speak() {
    // TODO Auto-generated method stub
    System.out.println("说英语");
    }

    @Override
    public void eat() {
    // TODO Auto-generated method stub
    System.out.println("吃篮球餐");
    }

    @Override
    void study() {
    // TODO Auto-generated method stub
    System.out.println("学习篮球");
    }

    public BasketballPlayer() {
    super();
    // TODO Auto-generated constructor stub
    }

    public BasketballPlayer(String name, int age) {
    super(name, age);
    // TODO Auto-generated constructor stub
    }

    @Override
    public String toString() {
    return "BasketballPlayer [getName()=" + getName() + ", getAge()=" + getAge() + "]";
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Test {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    BasketballPlayer bp=new BasketballPlayer("张三",30);
    bp.eat();
    bp.study();
    bp.speak();
    System.out.println(bp.toString());
    }

    }
    1
    2
    3
    4
    吃篮球餐
    学习篮球
    说英语
    BasketballPlayer [getName()=张三, getAge()=30]