黑马程序员技术交流社区

标题: 请大神指导 [打印本页]

作者: WElife    时间: 2015-7-17 00:41
标题: 请大神指导
多态
                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>
复制代码




作者: WElife    时间: 2015-7-17 00:42
代码 如下
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
               
        }
}

作者: 嘟嘟嘟嘟嘟    时间: 2015-7-17 01:23
A:成员变量。
编译看左边:如果将子类向上转型( Fu fu = new Zi()),而子类中有特有的成员变量(父类中没有),并且还调用了它,代码在编译时会报错
运行看左边:如果父类子类中都有同一种成员变量,运行时程序使用的是父类中成员变量的值.
原因:实例化以后,子类已经提升为父类型了,所以找的是父类的成员变量.
B成员方法:编译看左边:代码在编译时会查看你调用的方法在父类中是否存在,不存在即报错
运行看右边:程序在运行时,调用的是子类的方法.原因:其创建的对象fu,指向的时Zi,所以调用时先去寻找的是子类的方法.

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



作者: 游呤人    时间: 2015-7-17 01:29
基础知识的部分要多记记
作者: WElife    时间: 2015-7-19 09:07
嘟嘟嘟嘟嘟 发表于 2015-7-17 01:23
A:成员变量。
编译看左边:如果将子类向上转型( Fu fu = new Zi()),而子类中有特有的成员变量(父类中没有), ...

谢谢 大神  我懂了
作者: micro_hx    时间: 2015-7-19 10:36
WElife 发表于 2015-7-19 09:07
谢谢 大神  我懂了

大神你真的懂了么???
作者: 灰灰    时间: 2015-7-19 10:43
这个的确有点难度




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