职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 288|回复: 9

结果出乎大部分人的意料

[复制链接]
月上萧萧 发表于 2011-8-19 08:42 | 显示全部楼层 |阅读模式
Java代码  
package j2se.test;   
  
class A{   
    int x, y;   
      
    public void setValue(int i, int j) {   
        x = i;   
        y = j;   
    }   
  
    int multiply(){   
        return x * y;   
    }   
}   
  
class B extends A{   
    int x, y;   
  
    B(int i, int j) {   
        x = i;   
        y = j;   
    }   
  
    int multiply(){   
        return x * y;   
    }   
}   
  
public class Test{   
    public static void main(String[] args) {   
        B subObj = new B(6, 9);   
        subObj.setValue(7, 8);   
        int m = subObj.multiply();   
        System.out.println(m);   
    }   
  
}  

package j2se.test;

class A{
        int x, y;
       
        public void setValue(int i, int j) {
                x = i;
                y = j;
        }

        int multiply(){
                return x * y;
        }
}

class B extends A{
        int x, y;

        B(int i, int j)        {
                x = i;
                y = j;
        }

        int multiply(){
                return x * y;
        }
}

public class Test{
        public static void main(String[] args) {
                B subObj = new B(6, 9);
                subObj.setValue(7, 8);
                int m = subObj.multiply();
                System.out.println(m);
        }

}


结果是54.为什么不是56?

参考:http://bbs.langsin.com/thread-10113-1-1.html

芷馨 发表于 2011-8-19 08:42 | 显示全部楼层
调用被子类隐藏的变量,应该要用super关键字吧

fl 发表于 2011-8-19 08:42 | 显示全部楼层
A的xy
B的xy

明显是两个东西。


紫衿 发表于 2011-8-19 08:42 | 显示全部楼层
我承认我错了。
Java代码  
class C {   
    public int x, y;   
  
    public void setValue(int i, int j) {   
        x = i;   
        y = j;   
    }   
  
}   
  
class D extends C {   
    public int x, y;   
  
    D(int i, int j) {   
        x = i;   
        y = j;   
    }   
  
    public void setValue(int i, int j) {   
        super.setValue(i, j);   
        x = i;   
        y = j;   
    }   
  
    int multiply() {   
        return x * y;   
    }   
}  

class C {
        public int x, y;

        public void setValue(int i, int j) {
                x = i;
                y = j;
        }

}

class D extends C {
        public int x, y;

        D(int i, int j) {
                x = i;
                y = j;
        }

        public void setValue(int i, int j) {
                super.setValue(i, j);
                x = i;
                y = j;
        }

        int multiply() {
                return x * y;
        }
}


叫我小乖 发表于 2011-8-19 08:43 | 显示全部楼层
kimmking 写道
A的xy
B的xy

明显是两个东西。


+1

走失的猫咪 发表于 2011-8-19 08:43 | 显示全部楼层
变量的作用域不同而已!

北大青鸟 发表于 2011-8-19 08:43 | 显示全部楼层
shansun123 写道
kimmking 写道
A的xy
B的xy

明显是两个东西。


+1

+1

能文能武 发表于 2011-8-19 08:43 | 显示全部楼层
方法可以覆盖,变量不可以覆盖吧

已经来了吗 发表于 2011-8-19 08:43 | 显示全部楼层
结果在意料之中!

能文能武 发表于 2011-8-19 08:43 | 显示全部楼层
C_J 写道
我承认我错了。
Java代码  
class C {   
    public int x, y;   
  
    public void setValue(int i, int j) {   
        x = i;   
        y = j;   
    }   
  
}   
  
class D extends C {   
    public int x, y;   
  
    D(int i, int j) {   
        x = i;   
        y = j;   
    }   
  
    public void setValue(int i, int j) {   
        super.setValue(i, j);   
        x = i;   
        y = j;   
    }   
  
    int multiply() {   
        return x * y;   
    }   
}  

class C {
        public int x, y;

        public void setValue(int i, int j) {
                x = i;
                y = j;
        }

}

class D extends C {
        public int x, y;

        D(int i, int j) {
                x = i;
                y = j;
        }

        public void setValue(int i, int j) {
                super.setValue(i, j);
                x = i;
                y = j;
        }

        int multiply() {
                return x * y;
        }
}


94,
子类里调用的是父类的setValue方法,子类里没有这个方法,
改变不了子类里的 x,y 当然是6 9而不是7 8

您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-10 19:20 , Processed in 0.142591 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表