廖雪峰Java2面向对象编程-4抽象类和接口-2接口

1.接口的定义

抽象方法本质上是定义接口规范。

  • 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法。
public abstract class Person{
    public abstract void run();
}
public class Student extends Person{
    @Override
    public void run(){}
}
public class Teacher extends Person{
    @Override
    public void run(){}
}

如果一个抽象类没有字段,所有方法全部是抽象方法,就可以把抽象类改写为接口interface。

  • Java中使用interface声明一个接口
  • 接口定义的方法默认是public abstract,不需要再写public abstract。
  • 一个类实现interface使用implements
  • 可以实现多个接口
  • 一个interface可以继承自另一个interface

    1.1定义接口

public interface Person{
    public abstract void run();
}
public class Student implements Person{
    @Override
    public void run(){}
}
public class Teacher implements Person{
    @Override
    public void run(){}
}

1.2一个类实现多个接口

public interface Auto{}
public interface Type{}
public class Produce implements Auto,Type{}

1.3一个interface可以继承自另一个interface

interfaces继承自interface使用的extends,相当于扩展了接口的方法

public interface Person{
    String getName();
}
public interface Student extends Person{
    String getSchool();
}
public class PrimaryStudent implements Person{
    @Override
    public String getName(){...}
    @Override
    public String getSchool(){...}
}

1.4.实例

Shape.java

public interface Shape {
    //抽象方法,用于计算面积
    double area();
    //不想在每个类中都实现perimeter方法,可以将该方法定义为default方法
    default double perimeter(){
        return 0;
    };
}

Rect.java

public class Rect implements Shape{
    private final double width;
    private final double height;
    public Rect(double width, double height){
        this.height = height;
        this.width = width;
    }
    @Override
    public double area() {
        return width * height;
    }
}

Circle.java

public class Circle implements Shape{
    private double radius;
    public Circle(double radius){
        this.radius = radius;
    }
    @Override
    public double area() {
        return Math.PI * radius * radius;
    }
}

Hello.java

public class Hello {
    public static void main(String[] args){
        Shape s1 = new Rect(200,100);//可以用接口类型声明实例
        Shape s2 = new Circle(60);
        System.out.println(s1.area());
        System.out.println(s2.area());
    }
}

1418970-20190116195858224-1644101531.png


合理设计interface和abstract class的继承关系

  • 公共逻辑放在abstract class
  • 接口层次代表抽象程度

2.接口和编程接口的区别


注意区分术语:

  • Java的接口特质interface定义的接口,只定义方法签名
  • 编程接口泛指接口规范,如方法签名,数据格式,网络协议等

3.抽象类和接口的区别

abstract classinterface
继承只能extends一个class可以implements多个interface
字段可以定义实例字段不能定义实例字段
抽象方法可以定义抽象方法可以定义抽象方法
非抽象方法可以定义非抽象方法,即普通的实例方法不能定义非抽象方法,但可以定义default方法

4.总结

  • 接口定义了纯抽象规范
  • 类可以实现多个接口
  • 接口也是数据类型,适用于向上转型和向下转型
  • 接口不能定义实例字段
  • 接口可以定义default方法(JDK >= 1.8)

转载于:https://www.cnblogs.com/csj2018/p/10274685.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值