黑马程序员技术交流社区

标题: 若子父类都有相同的成员变量时,子类方法访问谁的成员? [打印本页]

作者: redlake    时间: 2015-4-12 11:22
标题: 若子父类都有相同的成员变量时,子类方法访问谁的成员?
代码如下,输出结果都是5.....4,为什么第二个不是5.....5?谁给我解答一下,谢谢!
class Fu
{
        int num = 4;
        public int getNum()
        {
                return num;
        }
}
class Zi extends  Fu
{
        int num = 5;
        public int getNum()
        {
                return num;
        }
        void show()
        {
                System.out.println(this.num+"....."+super.getNum());
                System.out.println(this.num+"....."+this.getNum());
        }
}

class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                z.show();
        }
}



作者: xlunaer    时间: 2015-4-12 11:28
我试了一下,结果没错

捕获.PNG (6.35 KB, 下载次数: 37)

捕获.PNG

作者: pengcheng0328    时间: 2015-4-12 11:34
本帖最后由 pengcheng0328 于 2015-4-12 11:35 编辑

1、子类和父类如果有一样的方法,那么在访问子类时就会发生覆盖。2、super就是调用父类,this是调用当前类的,在上面的例子中就是调用子类的。

作者: redlake    时间: 2015-4-12 11:39
xlunaer 发表于 2015-4-12 11:28
我试了一下,结果没错

发错了,其实我是想问这个
class Fu
{
        int num = 4;
        public int getNum()
        {
                return num;
        }
}
class Zi extends  Fu
{
        int num = 5;
        void show()
        {
                System.out.println(this.num+"....."+super.getNum());
                System.out.println(this.num+"....."+this.getNum());
        }
}

class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                z.show();
        }
}

作者: xlunaer    时间: 2015-4-12 11:42
redlake 发表于 2015-4-12 11:39
发错了,其实我是想问这个
class Fu
{

子类里面没有getNum()方法,子类调用找不到自己的,只能去找父类的方法了
作者: pengcheng0328    时间: 2015-4-12 11:45
同上,子类可以直接使用父类的方法。
作者: fantacyleo    时间: 2015-4-12 11:49
子类中如果有和父类同名的变量,那么就把父类的同名变量隐藏了,子类中默认访问的是子类的变量。如果要访问父类变量,就用super关键字
作者: redlake    时间: 2015-4-12 18:12
fantacyleo 发表于 2015-4-12 11:49
子类中如果有和父类同名的变量,那么就把父类的同名变量隐藏了,子类中默认访问的是子类的变量。如果要访问 ...

如果子类有相同的成员变量,父类的方法为什么不访问子类的变量而是父类的变量?
作者: fantacyleo    时间: 2015-4-12 19:19
redlake 发表于 2015-4-12 18:12
如果子类有相同的成员变量,父类的方法为什么不访问子类的变量而是父类的变量? ...

因为super是指向父类的地址空间的。当然是在父类找变量啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2