A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© WElife 中级黑马   /  2015-7-17 00:41  /  377 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

多态
                A:成员变量
                        编译看左边,运行看左边。
                B:成员方法
                        编译看左边,运行看右边。
                   Father fa = new Son();
这到底 是什么意思 看不懂啊  求大神详解

  1. <p>class Father</p><p>{</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>public int num = 10;</p><p>
  2. </p><p><span class="Apple-tab-span" style="white-space:pre">        </span>public void show()</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>{</p><p><span class="Apple-tab-span" style="white-space:pre">                </span>System.out.println("fu show");</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>}</p><p>}</p><p>
  3. </p><p>class So extends Father</p><p>{</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>public int num = 20;</p><p>
  4. </p><p><span class="Apple-tab-span" style="white-space:pre">        </span>public void show()</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>{</p><p><span class="Apple-tab-span" style="white-space:pre">                </span>System.out.println("zi show");</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>}</p><p>
  5. </p><p><span class="Apple-tab-span" style="white-space:pre">        </span>public void method()</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>{</p><p><span class="Apple-tab-span" style="white-space:pre">                </span>System.out.println("zi method");</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>}</p><p>}</p><p>
  6. </p><p>class DuoTaiDemo2 </p><p>{</p><p><span class="Apple-tab-span" style="white-space:pre">        </span>public static void main(String[] args) </p><p><span class="Apple-tab-span" style="white-space:pre">        </span>{</p><p><span class="Apple-tab-span" style="white-space:pre">                </span>Fu fu = new Zi();</p><p><span class="Apple-tab-span" style="white-space:pre">                </span><span style="line-height: 2.2em;">System.out.println(fu.num);           //10</span></p><p><span class="Apple-tab-span" style="white-space:pre">                </span></p><p><span class="Apple-tab-span" style="white-space:pre">        </span>}</p><p>}</p><div></div>
复制代码



6 个回复

倒序浏览
代码 如下
class Father
{
        public int num = 10;

        public void show()
        {
                System.out.println("fu show");
        }
}

class So extends Father
{
        public int num = 20;

        public void show()
        {
                System.out.println("zi show");
        }

        public void method()
        {
                System.out.println("zi method");
        }
}

class DuoTaiDemo2
{
        public static void main(String[] args)
        {
                Fu fu = new Zi();
                System.out.println(fu.num);           //10
               
        }
}
回复 使用道具 举报
A:成员变量。
编译看左边:如果将子类向上转型( Fu fu = new Zi()),而子类中有特有的成员变量(父类中没有),并且还调用了它,代码在编译时会报错
运行看左边:如果父类子类中都有同一种成员变量,运行时程序使用的是父类中成员变量的值.
原因:实例化以后,子类已经提升为父类型了,所以找的是父类的成员变量.
B成员方法:编译看左边:代码在编译时会查看你调用的方法在父类中是否存在,不存在即报错
运行看右边:程序在运行时,调用的是子类的方法.原因:其创建的对象fu,指向的时Zi,所以调用时先去寻找的是子类的方法.

--
其实还有一个成员静态方法:和成员变量一样.编译和运行都参考左边.


回复 使用道具 举报
基础知识的部分要多记记
回复 使用道具 举报
嘟嘟嘟嘟嘟 发表于 2015-7-17 01:23
A:成员变量。
编译看左边:如果将子类向上转型( Fu fu = new Zi()),而子类中有特有的成员变量(父类中没有), ...

谢谢 大神  我懂了
回复 使用道具 举报
WElife 发表于 2015-7-19 09:07
谢谢 大神  我懂了

大神你真的懂了么???
回复 使用道具 举报
灰灰 中级黑马 2015-7-19 10:43:46
7#
这个的确有点难度
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马