“A a = new B();”怎么解释?
前提:A是B的父类。
这样写的目的是什么?a的类型肯定是A,但它拥有哪些A、B的哪些变量和函数?
还有,interface中的方法内容一定为空吗?
谢谢。
问题点数:100、回复次数:18Top
1 楼binriyue(无)回复于 2002-11-08 15:10:24 得分 10
对,造型问题,
interface中的方法一定是不能有方法体的。Top
2 楼sgr_kk(丝瓜)回复于 2002-11-08 15:13:07 得分 10
这样写的目的是不能确定把a定义称B,还是C(B,C都是A的子类,满足B条件是声定义B,满足C条件是定义成C)
interface是接口,只有函数声明,没有函数的实现Top
3 楼beyond_xiruo(CorruptionException)回复于 2002-11-08 15:14:50 得分 20
有这么一个例子
InputStream is=new FileInputStream("xxx.xxx");
我想这个就是你说的 A a=new B();吧
因为InputStream是抽象的类,而FileInputStream是它的子类,我们不能直接创建InputStream类的实例,但可以创建其子类的实例,而且其子类的类型是InputStream,nterface中的方法不一定全为空Top
4 楼jakarta(长风小侠)回复于 2002-11-08 15:41:15 得分 0
如果interface一定方法体一定为空的话,有些问题我想不明白,如:Collection.sort(...);其中,Collection是个接口吧,但在这里却直接调用接口的方法sort,怎么回事啊?Top
5 楼biti_9512207(波波斯基)回复于 2002-11-08 15:47:31 得分 0
我想这种问题是解释不清的,需要意会Top
6 楼fastmask(我心烦)回复于 2002-11-08 15:50:43 得分 0
Collection的句柄指向的是一个他的实现类的句柄,故此他的sort方法是已经被实现了的。这个句柄肯定不是用new Collection()来创建的。Top
7 楼qxjavajava(射手座 =--->静静看那流光飞舞)回复于 2002-11-08 15:59:32 得分 10
接口中的方法一定得没有方法体。
如:Collection.sort(...);其中,Collection是个接口吧,但在这里却直接调用接口的方法sort,怎么回事啊?-------------建议举一个准确的,不要随手写一个。Top
8 楼yongwolf(大梦方觉醒)回复于 2002-11-08 16:02:37 得分 10
interface是个接口,接口中的方法体不一定为空!
例如可以在里面申明常量啊!
呵呵!(这样就不为空了啊!)
但是,它永远不能有实例字段!
接口不是类,而是对符合接口要求的类的一种规范啊!
对啊!
Collection接口规定,在这个接口中一定要个方法sort(),一旦你实现了这个接口的话,这个方法你也实现了啊!
当然可以调用的啦!
呵呵!
Top
9 楼mefaintII(我晕)回复于 2002-11-08 16:42:46 得分 0
>例如可以在里面申明常量啊!
真的可以么?你试试看
只能设定形式参数吧Top
10 楼jakarta(长风小侠)回复于 2002-11-08 17:01:17 得分 0
不好意思,原来是这样的:
Collections是个class,自然可以使用方法sort,如:Collections.sort(entry_list, new AlphaComparator());
而Collection才是个接口。
不过,对于第一个问题,我还是想问:B b = new B();和A a = new A();到底有何区别?Top
11 楼jakarta(长风小侠)回复于 2002-11-08 17:10:18 得分 0
SL275:
Note – An interface can also declare constants: public static finalTop
12 楼Javatomchen()回复于 2002-11-08 17:17:47 得分 10
不出马不行了:
这是设计模式问题
举个例子:
一个项目中,要实现一个方法draw( Figure figure ) 供调用;
其中
class Figure
{
public void draw( )
{
}
}
调用模式 A.drawFigure( Figure figure );
估计要画的图形有n个,比如正方形,每个图形的画法都不同
看一个实现
class DrawSquare implements Figure{
public void draw()
{
//
}
}
可以这样调用 A.draw( new DrawSquare );
这样就隐藏了所有画图的实现过程
所有这些都来源于 三条腿的狗也是狗Top
13 楼Javatomchen()回复于 2002-11-08 17:20:03 得分 0
倒数第三行,写错了,应该是
A.drawFigure( new DrawSquare() );Top
14 楼Javatomchen()回复于 2002-11-08 17:21:40 得分 10
调用的是子类的实现,而不是接口里的方法
Top
15 楼lifejoy(山外青衫)回复于 2002-11-08 18:21:42 得分 10
多态性!面向对象的基本特性!Top
16 楼smallfox(小狐狸)回复于 2002-11-08 20:07:48 得分 0
设计模式比较难理解,初学java也不用考虑那么复杂,
如A 有两方法 m1 m2
B重载了其中一个m2
那么a.m1() 执行A.m1, a.m2()执行B.m2()
我觉得这是最实际的解释
interface只能有常数和接口,实现时必须实现所有接口才行Top
17 楼smallfox(小狐狸)回复于 2002-11-08 20:19:58 得分 10
如果interface一定方法体一定为空的话,有些问题我想不明白,如:Collection.sort(...);其中,Collection是个接口吧,但在这里却直接调用接口的方法sort,怎么回事啊?
我猜你这个问题是指Collections不是Collection吧
Collections有一个方法叫sort() 去看看Top
18 楼jakarta(长风小侠)回复于 2002-11-09 14:18:58 得分 0
多谢各位。Top




