Java中的抽象类和接口

接口interface

接口类似于class,但与class的单继承不同,一个interface可以继承于多个interfaceInterface的一般形式是常量(如果需要的话)和方法签名(method signatures, 没有方法体)的集合,例如:

  1. interface Bicycle extends Interface1, Interface2, Interface3,… {
  2.        // constant declarations, if any.
  3.        // method signatures
  4.        void changeCadence(int newValue);
  5.        void changeGear(int newValue);
  6.        void speedUp(int increment);
  7.        void applyBrakes(int decrement);
  8. }

1:接口的访问权限默认为package private,即只有同一package内的class可访问。

2:接口里定义的方法的访问权限默认是public的。

3:接口里定义的方法隐含都是abstract的,可以但不必要加上abstract修饰符。

 

接口本身不能被实例化,只能被其他类实现, 或者extended by other interfaces

接口实现的一般形式:

  1. class ACMEBicycle implements Bicycle {
  2.    // 分别实现接口里的method signatures
  3. }

         在Java编程中,一个class 只能继承于一个class,而一个 class可以实现多个interface,好比一台计算机从集成电路继承而来,可以实现USB、COM、RJ45、RS232等多种接口。所以,一个对象可以有多种类型:它自己所实例化的class或它所实现的任意一个interface( using an interface as a type)。如果一个变量声明为一个interface类型,那么它就可以引用(指向)任意一个实现了此interface的class的对象(use an interface as a class)

 

public class TestInterface {
  public static void main(String[] args){
   AClass myClass = new AClass();
   AnInterface myInterface = myClass;
   myInterface.sayHello();
  
  }
}

interface AnInterface{
 void sayHello();
}

class AClass implements AnInterface {
 public void sayHello(){System.out.println("Hello!");}
}

   如果你的类(non-abstract class)被声明implements一个接口,那么就必须在这个类中实现接口所定义的所有方法。

 

抽象类与接口的区别

接口是一种特殊的抽象类,它是只含有函数签名(如有必要,再加上常量形式的成员变量)的抽象类。

1、  抽象类可以含有除static、final之外的其他成员变量。接口的成员变量只能是常量。

2、  抽象类中可以有非抽象方法部分实现,再由其子类完成更多实现。而接口中只能含有抽象方法,所有方法都不得有方法体(即使空方法体{}也不行),完全通过其它类来全部实现接口。如果一个抽象类中只有抽象方法,那么此类就可以声明为接口。

3、  多个接口可以由毫不相关的任意类实现,而抽象类逻辑上一般由它的子类继承实现。例如:

 

 

 

 The GraphicObject class can look something like this:

  1. abstract class GraphicObject {
  2.     int x, y;
  3.     ...
  4.     void moveTo(int newX, int newY) {
  5.         ...
  6.     }
  7.     abstract void draw();
  8.     abstract void resize();
  9. }
Each non-abstract subclass of GraphicObject, such as Circle and Rectangle, must provide implementations for the draw and resize methods:(含有abstract方法的类一定是abstract类)

  1. class Circle extends GraphicObject {
  2.     void draw() {
  3.         ...
  4.     }
  5.     void resize() {
  6.         ...
  7.     }
  8. }
  9. class Rectangle extends GraphicObject {
  10.     void draw() {
  11.         ...
  12.     }
  13.     void resize() {
  14.         ...
  15.     }
在抽象类中实现接口

    例如:

  1. abstract class X implements Y {  //Y is a interface
  2.   // implements all but one method of Y
  3. }
  4. class XX extends X {
  5.   // implements the remaining method in Y
  6. }
In this case, class X must be abstract because it does not fully implement Y, but class XX does, in fact, implement Y.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值