一个关于JAVA基础知识的问题?

//fileInFace.javapublicinterfaceInFace{publicvoidinFaceA();}//fileImple.javapubliccla... //file InFace.java
public interface InFace
{
public void inFaceA();
}

//file Imple.java
public class Imple implements InFace
{
public void inFaceA()
{
System.out.println("InterFace method!");
}
public void impleB()
{
System.out.println("Implement method!");
}
}

//file TestIn.java
public class TestIn
{
public static void main(String[] args)
{
InFace i = new Imple();
i.inFaceA() ;
System.out.println( i.toString() );
//为什么此处i只能显示调用inFaceA,而不能调用impleB.
}
}
展开
 我来答
twobit
2007-07-23 · TA获得超过118个赞
知道答主
回答量:18
采纳率:0%
帮助的人:30.9万
展开全部
当用接口指向实现类的时候,只能使用由接口声明的并且被实现类实现的方法,这时不能再使用实现类自己特有的方法了。

举个简单的例子。

class 政治家类 implements 愚蠢接口;

当 “愚蠢接口 蠢人=new 政治家类();”的时候,我们只需要关心“政治家类实例”愚蠢的一面了,而不必关心“政治家类实例”从“政治家类”中获得的其他的特性了,我们有的只是一个“蠢人”!

如果这时你一定要使用“政治家类”的某些特有方法,可以将上例中的“蠢人”强制转换回“政治家类”的对象。(政治家类 政治家=(政治家类)蠢人;)
用你的例子:

Imple imple = (Imple)i;
imple.impleB() ;


然而接口更大的意义在于:很多实现类可以实现同一个接口,当一个方法的参数中需要用到所有的实现类,而且在方法中仅需要使用这些实现类实现自接口声明的方法的时候,可以不必对方法进行多次重载,而直接将接口作为方法的形参。

再举个例子。

“政治家类”和“社会盲流类”都实现了“愚蠢接口”,(class 政治家类 implements 愚蠢接口;class 社会盲流类 implements 愚蠢接口;)而“愚蠢接口”中声明了“说空话方法”,当我们需要一个方法“谴责”所有实现了“愚蠢接口”的“蠢人”的时候,我们可以这样做:
“[public] void 谴责(愚蠢接口 蠢人)
{
强烈谴责(蠢人.说空话方法());
}


这样,无论在调用“谴责”方法的时候传入的实参是“政治家”还是“社会盲流”(谴责(new 政治家类());谴责(new 社会盲流类())),我们都可以“强烈谴责”了,而没有必要去区分“谴责”的是“政治家”还是“社会盲流”了。

无论怎么说,接口是面向对象程序设计中一个非常重要的工具!

另外,所举例子纯属信手拈来,本人绝没有歧视“政治家”和“社会盲流”的意思。
koostyle
2007-07-23 · TA获得超过1892个赞
知道小有建树答主
回答量:686
采纳率:50%
帮助的人:568万
展开全部
首先你要了解的是"多态"
那么这里的原因就是因为你使用的是多态.
这里简单的说一下,多态是JAVA的一种机制,它允许父类的引用去引用一个子类的对象,或者接口的引用去引用一个接口实现类的对象(正如你这例子一样,你的Imple类是一个Inface的实现类,你的i是接口Inface的引用,引用了Imple的对象.)...
使用多态的目的是,我们只需要知道父类或者接口所提供的方法,就能知道其子类或者实现类应具有的方法(比如你的inFaceA().那么相应的,我们并不能确定子类或者实现类本身还具有的自有的方法,比如你的impleB().

说简单一点,如果有一个父类或者接口的引用,我们使用这个引用去指向一个子类或者实现类对象,我们只能使用(我们通过该引用只知道)在父类或者接口中的方法,子类或者实现类新增的属性或方法我们是不知道的,只能通过子类或者实现类本身的引用来获取.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式