java中抽象类与接口

   java中抽象类与接口

   面向对象的计算机编程语言致力于用简洁的语言描述客观的世界,java便是一个很好的例子。首先来看一个现实生活中的现象:乐器是一个总称,它包含了笛子、小提琴、吉他、古筝等等,这一系列的东西都有一种共性,那就是发声(当然不只是发声)。然而每种乐器的发声方法都不一样。如果要用编程语言去描述这种现象,该怎么去解决呢?

   以java为例,java中用抽象类或接口去描述这种关系。可以说抽象类是普通类和接口的一种中庸之道(摘自《Thinking in java》),或者说接口是一种更为“纯粹”的抽象类,因为抽象类中可以包含非抽象类,而接口是绝对不允许的。下面将具体讲述抽象类和接口,相信大家读完后,对其中的联系和区别会有更深的认识。

抽象类

Javaabstract标识抽象类和抽象方法。一旦一个方法被声明为抽象方法,那么它只有方法的声明而没有方法实体,比如:


abstract class Instrument{

String Name;

abstract void play();//抽象类,没有实体

}

就好比乐器“发声”这一功能,在创建乐器时,你并不知道乐器这个抽象的概念是如何发声的,只有具体到某一乐器时(如笛子)才能确定发声方式。

当一个类含有一个或多个抽象方法时,要声明为抽象类(前面用abstract”声明),抽象类是不可被实例化的,当然也就没有构造方法。只要一个类中包含抽象方法,那么这个类必须被声明为抽象类,即以下两种情况:

1)类中包含一个或多个抽象方法;

2)类实现了一个接口,或者继承了一个抽象类,并且该类没有完全实现所有的抽象类。

比如:

abstract class Test1{

abstract void f1();

abstract void f2();

}

 

abstract class Test2extends Test1{/*没有完全实现类Test1中所有的抽象类,必须声明为抽象类*/

void f1(){          //没有意义的一个方法,因为该类不能被实例化

System.out.println("Test2");

}

}

 

class Test3extends Test2{

void f1(){System.out.println("Test3");}

void f2(){};//虽然是空方法体,但毕竟实现了该方法

}



接口(interface)

接下来我再讲讲接口又是嘛玩意。给出一般教材给的定义:是一系列常量定义和抽象方法声明的集合。可能对于初学者,乍一听“接口”这个词,不太能接受,继续往下看便能理解这个叫法了。

 

上文提到过接口是一种更为“纯粹”的抽象类。纯粹到什么地步,一个接口中,所有的方法都是抽象的,不允许有任何的具体的东西存在(抽象的极端)。接口可以理解成一种极为抽象的特殊类,不过为了和普通类区别开,接口用interface声明。

1接口的特征

(1)接口中所有的变量是publicstaticfinal的,即公有的静态常量;

(2)接口的方法默认都是publicabstract的,即公有的抽象方法;

(3)不能被实例化,但可以定义接口类型的引用变量;

(4)接口允许多重继承,用extends关键词声明父接口,逗号隔开;

 

2接口的分类

(1)普通接口:含有方法

(2)常量接口:只含有常量

(3)标识接口:没有任何方法和常量

 

3.接口的实现

接口只能由类实现,用implements关键词声明,一个类可以实现多个接口。类必须实现接口的所有的抽象方法,不然必须声明为abstract,即抽象类。比如:

interface InterfaceTest{

void F1();

void F2();

}

 

abstract class Aimplements InterfaceTest{/*没有全部实现接口的所有方法,必须声明为抽象类*/

public void F1(){System.out.println("A F1()");}

}

 

class Bimplements InterfaceTest{

public void F1(){System.out.println("B F1()");}

public void F2(){System.out.println("B F2()");}

}


 

 



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值