接口(interface)

JAVA的核心概念:接口(interface)

接口与类属于同一层次,实际上,接口是一种特殊的抽象类。

如:

  interface IA{

}

publicinterface:公开接口

与类相似,一个文件只能有一个public接口,且与文件名相同。

在一个文件中不可同时定义一个public接口和一个public类。

一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。

 

一个类实现一个接口的格式:

class IAImpleimplements IA{

};

 

一个类实现接口,相当于它继承一个抽象类。

 

类必须实现接口中的方法,否则其为一抽象类。

实现中接口和类相同。

 

接口中可不写public,但在子类中实现接口的过程中public不可省。

(如果剩去public则在编译的时候提示出错:对象无法从接口中实现方法。)

 

注:

① 一个类除继承另外一个类,还可以实现接口;

class IAImpl extends java.util.Arrylist implement IA{}

                 继承类                    实现接口

这样可以实现变相的多继承。

② 一个类只能继承另外一个类,但是它可以继承多个接口,中间用“,”隔开。

Implements IA,IB

所谓实现一个接口,就是指实现接口中的方法。

③ 接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。

例:interface IC extends IA,IB{};

接口也可以用于定义对象

IA I=new IAImpl();

实现的类从父类和接口继承的都可做运行时类型。

IAImple extends A implement IA,IB

IB I=new IAImple();

I instance of IAImple;

I instance of A;

I instance of IA;

I instance of IB;

返回的结果均为true.

 

接口和多态都为JAVA技术的核心。

 

接口往往被我们定义成一类XX的东西。

接口实际上是定义一个规范、标准。

 

① 通过接口可以实现不同层次、不同体系对象的共同属性;

通过接口实现write once as anywhere.

以JAVA数据库连接为例子:JDBC制定标准;数据厂商实现标准;用户使用标准。

接口通常用来屏蔽底层的差异。

②接口也因为上述原因被用来保持架构的稳定性。

 

JAVA中有一个特殊的类: Object。它是JAVA体系中所有类的父类(直接父类或者间接父类)。

 

此类中的方法可以使所的类均继承。

 

以下介绍的三种方法属于Object:

(1)  finalize方法:当一个对象被垃圾回收的时候调用的方法。

(2)  toString():是利用字符串来表示对象。

当我们直接打印定义的对象的时候,隐含的是打印toString()的返回值。

可以通过子类作为一个toString()来覆盖父类的toString()。

以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖toString()。

(3)equal

首先试比较下例:

String A=newString(“hello”);

String A=newString(“hello”);

A==B(此时程序返回为FALSE)

因为此时AB中存的是地址,因为创建了新的对象,所以存放的是不同的地址。

 

附加知识:

字符串类为JAVA中的特殊类,String中为final类,一个字符串的值不可重复。因此在JAVA VM(虚拟机)中有一个字符串池,专门用来存储字符串。如果遇到String a=”hello”时(注意没有NEW,不是创建新串),系统在字符串池中寻找是否有”hello”,此时字符串池中没有”hello”,那么系统将此字符串存到字符串池中,然后将”hello”在字符串池中的地址返回a。如果系统再遇到String b=”hello”,此时系统可以在字符串池中找到 “hello”。则会把地址返回b,此时a与b为相同。

 

 

Stringa=”hello”;

System.out.println(a==”hello”);

系统的返回值为true。

 

故如果要比较两个字符串是否相同(而不是他们的地址是否相同)。可以对a调用equal:

System.out.println(a.equal(b));

equal用来比较两个对象中字符串的顺序。

a.equal(b)是a与b的值的比较。

 

 

注意下面程序:

student a=new student(“LUCY”,20);

student b=new student(“LUCY”,20);

System.out.println(a==b);

System.out.println(a.equal(b));

此时返回的结果均为false。

 

以下为定义equal(加上这个定义,返回ture或false)

public booleanequals(Object o){

  student s=(student)o;

  if (s.name.equals(this.name)&&s.age==this.age)

else returnfalse;

}如果equals()返回的值为

 

以下为实现标准equals的流程:

public booleanequals(Object o){

  if (this==o) return trun;  //此时两者相同
  if (o==null) return false;

  if (! o instanceof strudent) returnfalse;  //不同类

  studeng s=(student)o; //强制转换

  if (s.name.equals(this.name)&&s.age==this.age)return true;

else returnfalse;

}

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值