小编Anj*_*Anj的帖子

append() 是创建参数的副本还是将实际参数的引用附加到列表中?

当我跑

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)

那么,基本上,它是否将参数的引用附加到列表中?不是与论证完全无关的副本?

python append

5
推荐指数
0
解决办法
5640
查看次数

确定实际调用了哪个覆盖方法

例如,当子类对象被转换为其超类时

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()吗?

感谢大家的解释(:

编辑:意味着在标题中覆盖*

java

0
推荐指数
1
解决办法
93
查看次数

标签 统计

append ×1

java ×1

python ×1