第一百二十二节 Java面向对象设计 - Java接口实现

Java面向对象设计 - Java接口实现

实现接口

接口指定对象必须提供的协议。

类可以提供接口的抽象方法的部分实现,并且在这种情况下,类必须将自身声明为抽象。

实现接口的类使用“implements”子句来指定接口的名称。

“实现”子句由关键字implements,后跟逗号分隔的接口类型列表组成。

一个类可以实现多个接口。

实现接口的类声明的一般语法如下:

<modifiers> class  <class-Name>  implements <comma-separated-list-of-interfaces>  {
    // Class body  goes  here
}

假设有一个Circle类。

public class Circle implements Shape {
   void  draw(){
      System.out.println("draw circle");
   }
}

实现接口的类必须重写以实现接口中声明的所有抽象方法。否则,类必须声明为abstract。

接口的默认方法也由实现类继承。

植入类可以选择不需要重写默认方法。

接口中的静态方法不会被实现类继承。

下面的代码定义了两种引用类型,一种来自Circle类,另一种来自接口类型。

Circle c = new Circle(); 
Shape shape = new Circle();

变量c是Circle类型。它指的是Circle对象。

第二个赋值也是有效的,因为Circle类实现了Shape接口,而Circle类的每个对象也都是Shape类型。

实现接口方法

当一个类完全实现了一个接口时,它为所实现的接口的所有抽象方法提供一个实现。

接口中的方法声明包括方法的约束。例如,方法声明中的throws子句是​​方法的约束。

import java.io.IOException;
interface Shape {
  void draw(double amount) throws IOException;
}
class Main implements Shape{

  @Override
  public void draw(double amount) {
    // TODO Auto-generated method stub
  }  
}

Main的代码是有效的,即使它丢弃了throws子句。当类覆盖接口方法时,允许删除约束异常。

如果我们使用Shape类型,我们必须处理IOException。

import java.io.IOException;

interface Shape {
  void draw(double amount) throws IOException;
}
class Main implements Shape{

  @Override
  public void draw(double amount) {
    // TODO Auto-generated method stub
    
  }
  public void anotherMethod(){
    Shape s = new Main();
    try {
      s.draw(0);
    } catch (IOException e) {
      e.printStackTrace();
    }
    draw(0); 
  }
}

实现多个接口

一个类可以实现多个接口。类实现的所有接口都在类声明中的关键字implements之后列出。

通过实现多个接口,类同意为所有接口中的所有抽象方法提供实现。

interface Adder {
  int add(int n1, int n2);
}
interface Subtractor {
  int subtract(int n1, int n2);
}
class Main implements Adder, Subtractor {
  public int add(int n1, int n2) {
    return n1 + n2;
  }
  public int subtract(int n1, int n2) {
    return n1 - n2;
  }
}

部分实现接口

类不必为所有方法提供实现。

如果一个类不提供接口的完全实现,它必须声明为abstract。

interface Calculator {
  int add(int n1, int n2);

  int subtract(int n1, int n2);
}
abstract class Main implements Calculator{
  public int add(int n1, int n2) {
    return n1 + n2;
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值