大家帮忙看下这个
class Student implements Cloneable
{
String name;
int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public Object clone()
{
Student o=null;
try
{
o=(Student)super.clone();
}
catch(CloneNotSupportedException e)
{
System.out.println(e.toString());
}
return o;
}
}
这段代码为一个克隆的代码,在最后的那个 return中返回的是Student类型而方法的类型 却是Object返回的类型不一致但是编译却通过了。把Object改为Student类型编译反而不行 这是为什么呢 ?不是说一个方法的返回类型要与方法的类型一致么 ?
------解决方案-------------------- "把Object改为Student类型编译反而不行 这是为什么呢 ? "
我承认我没看懂。。
你这个问题好像是 父类的变量可以引用子类对象,而子类变量不可以引用父类对象。任何一个类都是object的子类
------解决方案--------------------public Object clone(){}这个方法是覆盖了Object类中的public Object clone(){}方法
如果在Student类中,改成public Student clone(){}那么,在Student类中就有了
public Object clone(){}和public Student clone(){}这两个方法,
而方法是不可以用返回值来区分的.所以编译器会报错.
------解决方案--------------------Q.return中返回的是Student类型而方法的类型却是Object
A:Object是所有类的祖先,所以从多态的角度看,Student对象也是一个Object对象,所以把一个
Strudent类的引用赋给一个指向Object的引用是合理的。这就是多态的一个应用