为什么我们可以clone()
使用super.
符号访问方法,但不能通过创建 Object 类型的新对象来访问它。例如,如果我做类似的事情
Object obj = new Object();
然后(使用 Eclipse)我无法clone()
使用点运算符查看方法,这表明 obj 无法查看Object
类的受保护成员(只有公共方法可见)。
现在,如果我使用super
关键字 ie use super.
,我也可以查看受保护的方法。
所以我的问题是,在一个没有显式继承(扩展)其他类的类中——我知道它隐式调用 Object 类构造函数,即 Object 类是它的超类——为什么 super 关键字可以访问受保护的Object 类的成员,但不是通过创建 Object 类的实例来实现的(只有公共成员对 Object 类的实例可见)?
这是更清晰的代码(虽然它没有任何意义,但第一部分符合而其他不符合):
public class temp {
public temp() {
// TODO Auto-generated constructor stub
TestBikes t1 = new TestBikes();
Object ob1 = new Object();
try {
t1 = (TestBikes)super.clone(); //SUPER KEYWORD IS ABLE TO ACCESS
//PROTECTED MEMBERS OF Object
//CLASS
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
t1 = (TestBikes)ob1.clone(); // HERE IS THE ERROR SAYING clone()
// FROM Object CLASS IS NOT VISIBLE
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}