目录
  1. 1. 接口
    1. 1.1. 接口的特点
    2. 1.2. 接口成员特点
  2. 2. 抽象类和接口的区别
    1. 2.1. 成员区别
      1. 2.1.1. 抽象类
      2. 2.1.2. 接口
    2. 2.2. 关系区别
      1. 2.2.1. 类与类之间的关系
      2. 2.2.2. 类与接口之间的关系
      3. 2.2.3. 接口与接口之间的关系
    3. 2.3. 设计理念的区别
      1. 2.3.1. 示例
再学一次接口

接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

接口的特点

接口用关键字interface表示

interface 接口名 {}

类实现接口用implements表示

class 类名 implements 接口名 {}

接口不能实例化,但是可以被实现。

一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

(在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。)

接口成员特点

  • 成员变量;只能是常量,并且是静态的。默认修饰符:public static final
  • 接口没有构造方法。
  • 成员方法只能是抽象方法。 默认修饰符:public abstract

抽象类和接口的区别

成员区别

抽象类

    成员变量:可以变量,也可以常量
    构造方法:有
    成员方法:可以抽象,也可以非抽象

接口

    成员变量:只可以常量
    成员方法:只可以抽象

关系区别

类与类之间的关系

继承关系,只能单继承,可以多层继承。

class Son extends Object {

}

类与接口之间的关系

实现关系,可以单实现,也可以多实现。
并且还可以在继承一个类的同时实现多个接口。

interface Father {
public void show();
}

interface Mother {
public void show2();
}

class Son extends Object implements Father,Mother {
public void show() {
System.out.println("show son");
}

public void show2() {
System.out.println("show2 son");
}
}

接口与接口之间的关系

继承关系,可以单继承,也可以多继承。

interface Father {
public void show();
}

interface Mother {
public void show2();
}

interface Sister extends Father,Mother {

}

设计理念的区别

​ 抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
​ 接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

示例

猫狗案例,加入跳高的额外功能

// 定义跳高接口
interface Jumpping {
// 跳高方法
public void jump();
}

abstract Animal{
//姓名
private String name;
//年龄
private int age;

public Animal() {}

public Animal(String name,int age) {
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 abstract void eat();

// 睡觉
public void sleep(){
System.out.println("睡觉");
}
}

// 具体猫类
class Cat extends Animal {
public Cat(){}

public Cat(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("猫吃鱼");
}
}

// 具体狗类
class Dog extends Animal {
public Dog(){}

public Dog(String name,int age) {
super(name,age);
}
public void eat() {
System.out.println("狗吃肉");
}
}

// 会跳高的猫
class JumpCat extends Cat implements Jumpping {
public JumpCat() {}

public JumpCat(String name,int age) {
super(name,age);
}

public void jump() {
System.out.println("跳高猫");
}
}

// 会跳高的狗
class JumpDog extends Dog implements Jumpping {
public JumpDog() {}

public JumpDog(String name,int age) {
super(name,age);
}

public void jump() {
System.out.println("跳高狗");
}
}
文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-08/13/%E5%AD%A6%E4%B9%A0/%E5%90%8E%E7%AB%AF%E5%AD%A6%E4%B9%A0/JAVA/%E5%86%8D%E5%AD%A6%E4%B8%80%E6%AC%A1%E6%8E%A5%E5%8F%A3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论