当前位置: 技术问答>java相关
请问接口是如何操作的?
来源: 互联网 发布时间:2015-08-13
本文导语: 请问接口是如何操作的? 有一接口 public interface IA { ... } 另一个实现接口类: public class GIA implements IA{ ... } 在另一个类中: public class XX{ IA m_ia; public y(){ this.m_ia= new GIA(....); ... } }...
请问接口是如何操作的?
有一接口
public interface IA {
...
}
另一个实现接口类:
public class GIA implements IA{
...
}
在另一个类中:
public class XX{
IA m_ia;
public y(){
this.m_ia= new GIA(....);
...
}
}
1.那么作为接口的IA里面的方法是不是不用在IA本身中实现?
2.实现接口的类GIA是不是一定要全部实现接口IA中的所有方法?
3.this.m_ia= new GIA(....);执行完后为什么m_ia变为了GIA的一个实例?
有一接口
public interface IA {
...
}
另一个实现接口类:
public class GIA implements IA{
...
}
在另一个类中:
public class XX{
IA m_ia;
public y(){
this.m_ia= new GIA(....);
...
}
}
1.那么作为接口的IA里面的方法是不是不用在IA本身中实现?
2.实现接口的类GIA是不是一定要全部实现接口IA中的所有方法?
3.this.m_ia= new GIA(....);执行完后为什么m_ia变为了GIA的一个实例?
|
1.不是不用,而是根本不可以在里面写任何的函数实现部分
2.是的,否则会编译通不过
3.这个是类型转换GIA因为实现了IA接口,所以GIA可以直接转换成IA实例
所以可以赋值给m_ia。就是GIA可以转换成IA
2.是的,否则会编译通不过
3.这个是类型转换GIA因为实现了IA接口,所以GIA可以直接转换成IA实例
所以可以赋值给m_ia。就是GIA可以转换成IA
|
1.接口的定义本身就是只有名字没有实现,形象点说就是只给路口你,但不告诉你怎么走;
2.实现当然要全部实现,因为你既然实现继承下来,当然就要按着这个路口进入,具体走法你就可以自己选择啦,当然你可以在父亲的基础上另辟捷径;
3.这是你自己定义的,new句柄就是实例化的过程,因为IA是父亲并不一定拥有GIA的实现途径,所以这种实例化之后,m_ia就是一个丰满的GIA实例,当然它仍然具有IA接口内的所有方法。
2.实现当然要全部实现,因为你既然实现继承下来,当然就要按着这个路口进入,具体走法你就可以自己选择啦,当然你可以在父亲的基础上另辟捷径;
3.这是你自己定义的,new句柄就是实例化的过程,因为IA是父亲并不一定拥有GIA的实现途径,所以这种实例化之后,m_ia就是一个丰满的GIA实例,当然它仍然具有IA接口内的所有方法。
|
实例化后当然用GIA的方法,当然如果GIA没有改写IA的方法,其实就是用IA的方法,但从来没有人会这样说的,因为IA有的方法GIA一定有,但GIA有的方法反倒IA不一定有。
|
1. 与2同意 ChDw(米) 的观点
3。接口本身就表达了对象的类型,这也是java对象多型的表现,也就是说,一个对象可以表现为多种类型,而一个接口仅反映了一个对象的一方面的特性。因此,this.m_ia中虽然是一个GIA的实例,但由于GIA是属于IA类型的,GIA完全具备IA要求的特性,所以this.m_ia这个句柄可指向一个GIA实例。
4。你如果通过m_ia直接调用,只能调用IA中的方法,而不能调用GIA中别的方法(IA中所没有的)。但通过下述方法对m_ia造型后,可调用GIA中的方法:
(GIA)m_ia.methodOnlyInGIA();
3。接口本身就表达了对象的类型,这也是java对象多型的表现,也就是说,一个对象可以表现为多种类型,而一个接口仅反映了一个对象的一方面的特性。因此,this.m_ia中虽然是一个GIA的实例,但由于GIA是属于IA类型的,GIA完全具备IA要求的特性,所以this.m_ia这个句柄可指向一个GIA实例。
4。你如果通过m_ia直接调用,只能调用IA中的方法,而不能调用GIA中别的方法(IA中所没有的)。但通过下述方法对m_ia造型后,可调用GIA中的方法:
(GIA)m_ia.methodOnlyInGIA();
|
回答问题:
“但在这个类中并没有实现接口功能,也没有实例化IA,为什么可以直接用IA.HK的?”
接口中只能在方法定义和常量,不可能出现变量。所以IA.HK类型肯定是:
public static final type HK = vlaue;
所以在别的任何类中,只要import了IA类,就可使用HK常量。
“但在这个类中并没有实现接口功能,也没有实例化IA,为什么可以直接用IA.HK的?”
接口中只能在方法定义和常量,不可能出现变量。所以IA.HK类型肯定是:
public static final type HK = vlaue;
所以在别的任何类中,只要import了IA类,就可使用HK常量。
|
如果class H和interface IA在同一个package当中,IA是不用实例化都可以用的
另外IA当中HK字段应该是一个static变量
另外IA当中HK字段应该是一个static变量
|
IA.HK之所以不能实例化就可调用,是因为它是 static final 的。所以你问B中的GH能否不用实例化就可使用,这要看GH的性质。如果它是static的,当然就可在A中直接调用,而不能实例化B,当然GH对象必须初始化,要不然你会在实际运行程序时碰到一个空指针 。