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

来源:百度知道 编辑:UC知道 时间:2024/05/27 20:30:25
//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.
}
}

当用接口指向实现类的时候,只能使用由接口声明的并且被实现类实现的方法,这时不能再使用实现类自己特有的方法了。

举个简单的例子。

class 政治家类 implements 愚蠢接口;

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

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

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


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

再举个例子。

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


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

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

另外,所举例子纯属信手拈来,本人绝没有歧视“政治家”和“社会盲流”的意思。

首先你要了解的是"多态"