黑马程序员技术交流社区
标题:
一个面试题 有些不懂的地方
[打印本页]
作者:
攀攀
时间:
2014-4-30 18:57
标题:
一个面试题 有些不懂的地方
class Userful
{
public void f()
{
System.out.println("Now in f method of super class");
}
public void g()
{
System.out.print("Now in g method of super class");
}
}
class MoreUserful extends Userful
{
public void f()
{
System.out.println("Now in f method of derived class");
}
public void g()
{
System.out.println("Now in g method of derived class");
}
public void u()
{
System.out.println("Now in u method of derived class");
}
public void v()
{
System.out.println("Now in v method of derived class");
}
public void w()
{
System.out.println("Now in w method of derived class");
}
}
class Test
{
public static void main(String[] args)
{
Userful[] x = { new Userful(), new MoreUserful() };
x[0].f();
x[1].g();
((MoreUserful)x[1]).u();
}
}
复制代码
别的我都明白但是((MoreUserful)x[1]).u(); 这句是什么意思 不明白 为什么要把类名加到对象前边 是怎么一回事 麻烦大神帮忙解读一下
作者:
谢振宣
时间:
2014-4-30 19:29
本帖最后由 谢振宣 于 2014-5-1 21:21 编辑
class Userful
{
public void f()
{
System.out.println("Now in f method of super class");
}
public void g()
{
System.out.print("Now in g method of super class");
}
}
class MoreUserful extends Userful
{
public void f()
{
System.out.println("Now in f method of derived class");
}
public void g()
{
System.out.println("Now in g method of derived class");
}
public void u()
{
System.out.println("Now in u method of derived class");
}
public void v()
{
System.out.println("Now in v method of derived class");
}
public void w()
{
System.out.println("Now in w method of derived class");
}
}
class Test
{
public static void main(String[] args)
{
Userful[] x = { new Userful(), new MoreUserful() };
x[0].f();
x[1].g();
((MoreUserful)x[1]).u();//此处属于强制类型转换,但是x[1]本来就是MoreUserful类型的,此处转换无意义
}//之前的解释错了,修正一下:此处属于多态的应用,当子类要调用父类中没有定义的方法时,要向下转型为自己的类型
}//才能调用自己独有的方法。
复制代码
作者:
Lin0411
时间:
2014-5-1 17:54
此处必须加上MoreUserful的强制类型转换!!!
因为数组的类型是Userful,而数组中第二个元素存放的是Userful的子类MoreUserful类的实例对象。
x[1]相当于(Userful)(new MoreUserful() ),若不进行强制类型转换,则x[1]中只有覆盖了Userful中方法的方法,即f方法和g方法,而没有u方法,从而在直接运行x[1].u()时编译器报错找不到相应的方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2