当我跑
x = [0, 1]
y = [2, 3]
x.append(y)
x[2][1] = 4
print y
Run Code Online (Sandbox Code Playgroud)
它打印出来
[2, 4]
Run Code Online (Sandbox Code Playgroud)
那么,基本上,它是否将参数的引用附加到列表中?不是与论证完全无关的副本?
例如,当子类对象被转换为其超类时
Superclass obj = new Subclass();
Run Code Online (Sandbox Code Playgroud)
并且定义了类
public class Superclass{
public void thisMethod(){
System.out.println("Superclass version was executed");
}
Run Code Online (Sandbox Code Playgroud)
和
public class Subclass extends Superclass{
public void thisMethod(){
System.out.println("Subclass version was called");
}
public void newMethod(){
System.out.println("blah");
}
}
Run Code Online (Sandbox Code Playgroud)
当obj.thisMethod()调用时,我得到Subclass version was called输出,这显然意味着在子类中定义的这个方法的版本(原始Superclass对象不能"执行"的版本)被调用,虽然声明的类型是超类,是吗?所以,即使子类方法是在obj上执行的,当obj.newMethod()调用时,我也会遇到编译错误.
基本上,为什么thisMethod()通过Superclass对象调用子类中定义的版本obj?我明白实际的类型obj仍然是Subclass,所以很自然地,新版本应该被调用,但是,那么,我不应该调用obj.newMethod()吗?
感谢大家的解释(:
编辑:意味着在标题中覆盖*