【转】Java抽象类和接口

转自:http://blog.chinaunix.net/uid-25885064-id-3361989.html

Java语言中允许有一种叫做抽象方法的东西,它只是一个名字没有具体的实现。例如public abstract void abc(); 使用了abstract关键字,结尾用“;”结束。包含一个或多个抽象方法的类称为抽象类。抽象类也必须声明abstract关键字。抽象类的使用有着一些限制,不能创建抽象类的实例。如果子类实现了抽象方法,则可以创建该子类的实例对象。要是子类也不实现的话,这个子类也是抽象类,也不能创建实例。

       接口是什么东西呢?接口是比抽象类更抽象的类。例如 public interface Name { }接口里面的方法全都是抽象的,里面的变量全都是final的常量,而且实现接口的类必须将所有的抽象方法全部实现。抽象类里也可以有具体的方法。所以说,接口是最抽象的,其次是抽象类,而具体类本身就是对现实世界的抽象。软件开发本身就是将现实世界抽象成计算机世界。

       因为抽象类和接口比具体类抽象,所以使用时它们总是被继承而被实现的。不过继承它们的类不只是一个,有很多类实现它们的抽象方法。一个方法有多种实现方式,这里用到了OOP中的多态性。这使得设计变得非常清晰。因为基类是抽象类或是接口做一个描述,底下继承的类有若干个,只需要对接口或抽象类操作, 也用不着管有多少个实现。如果是多人共同开发的项目的话,是非常有意义的。

       接口的实现用关键字implement 而不是extends。如果用了extends的那就是继承这个接口。那么那个子类也是接口,是原来的子接口。


  1. //声明一个接口
  2. interface Say {
  3.     public void sayMessage();
  4. }

  5. //两个实现类
  6. class SayHello implements Say {
  7.     public void sayMessage() {
  8.         System.out.println("hello");
  9.     }
  10. }

  11. class SayHi implements Say {
  12.     public void sayMessage() {
  13.         System.out.println("Hi");
  14.     }
  15. }

  16. public class TestSay {
  17.     public static void main(String[] args) {
  18.     //同样都是用Say这个接口类型实例,却可以输出两个结果
  19.         Say say = new SayHello();
  20.         say.sayMessage();
  21.         Say say1 = new SayHi();
  22.         say1.sayMessage();
  23.     }
  24. }
       接口还有一个重要的作用,java语言中只有单继承,就是说只能从一个父类继承。单继承的好处是,一旦继承的太多了,改了一个类,子类就都变了。那么如果想继承多个父类的特性怎么办呢?就用接口吧,这个类可以先继承一个类,再去实现其它的接口,接口里面都是抽象方法,不会造成牵一发而动全身的效应。改变多继承的特性,也是对 C++ 语言的一项改进。

       业界有一种说法说,与其说java是面向对象编程,还不如说它是面向接口编程。强调的方面是接口的抽象描述性。它也是对C++的一种改进,C++里面没有接口。所以说java语言适合多人团队合作的大项目,看一个接口就可以了,后面怎么实现的可以不管。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值