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类型编译反而不行 这是为什么呢 ?不是说一个方法的返回类型要与方法的类型一致么 ?
{
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类中,改成public Student clone(){}那么,在Student类中就有了
public Object clone(){}和public Student clone(){}这两个方法,
而方法是不可以用返回值来区分的.所以编译器会报错.
A:Object是所有类的祖先,所以从多态的角度看,Student对象也是一个Object对象,所以把一个
Strudent类的引用赋给一个指向Object的引用是合理的。这就是多态的一个应用
之所以能通过,因为Student是Object的子类,而父类对象的变量可以引用子类的实例。
把Object改为Student类型编译反而不行 这是为什么呢,应该也是可以的,因为这样会把Object类中clone方法给覆盖掉了
public Object clone(){}和public Student clone(){}这两个同名的方法.
名字一样,参数一样,说明方法没有overload.
白马是马,马不是白马