黑马程序员技术交流社区

标题: 大家能否帮我看一下这个程序输出结果为什么是两个5呢 [打印本页]

作者: 硫氢化铁    时间: 2015-3-4 11:59
标题: 大家能否帮我看一下这个程序输出结果为什么是两个5呢
我自己理解成了4.......5

360截图20150304115819422.jpg (98.4 KB, 下载次数: 17)

360截图20150304115819422.jpg

作者: Hsidar    时间: 2015-3-4 12:14
你两个都是z.num怎么也不会出现两种值呀,子类和父类有同名函数当然以子类为准了。
作者: 硫氢化铁    时间: 2015-3-4 12:34
Hsidar 发表于 2015-3-4 12:14
你两个都是z.num怎么也不会出现两种值呀,子类和父类有同名函数当然以子类为准了。 ...

那我可以拿子类覆盖父类来理解吗
作者: Hsidar    时间: 2015-3-4 13:03
硫氢化铁 发表于 2015-3-4 12:34
那我可以拿子类覆盖父类来理解吗

这样也可以
作者: 王振光    时间: 2015-3-4 13:50
就算你这样写Fu z = new zi();结果也是一样 运行的类型是子类。你两个一样的怎么也不会出现不同的。
作者: zfgrinm    时间: 2015-3-4 14:16
你这里是直接生成子类对象,此时子类有,就在子类中找,没有时才去父类中,找当然是5了。如果是多态Fu f=new Zi();时,f.num=4,此时是用多态的规则,先去父类中初始化。
作者: yangruijing    时间: 2015-3-4 14:40
本帖最后由 yangruijing 于 2015-3-4 14:42 编辑

子父类出现后类成员的特点:1.子父类中变量的特点:父类的成员变量私有化之后,子类依然继承,但不能直接访问。如果子类中出现非私有的同名成员变量时,自雷要访问本类中的变量用 this  ,要访问父类中的同名变量,用super,所以,在程序中用子类的对象调用同名的成员变量,访问的是子类中的成员变量,要想都访问到,可以这样写:
public class test1 {        int num=4;   
    }
public class test2 extends test1 {  
          int num=5;
}
public class demo {
        public static void main(String[] args) {
               // TODO Auto-generated method stub   
             test2 t2=new test2();
               System.out.println("num="+t2.num);   
             test1 t1=new test2();//多态,子类对象将自动向上转型
               System.out.println("num="+t1.num);
       }
}
这样运行结果输出的是5,4






作者: linder_qzy    时间: 2015-3-4 15:55
看不清啊 有大图吗
作者: 硫氢化铁    时间: 2015-3-4 16:01
yangruijing 发表于 2015-3-4 14:40
子父类出现后类成员的特点:1.子父类中变量的特点:父类的成员变量私有化之后,子类依然继承,但不能直接访 ...

这样啊,多谢啦
作者: yangruijing    时间: 2015-3-4 19:08
硫氢化铁 发表于 2015-3-4 16:01
这样啊,多谢啦

没事,互帮互助,应该的





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