09-02 java 多态

前端之家收集整理的这篇文章主要介绍了09-02 java 多态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

多态的前提、多态的特点

多态的前提: A:要有继承关系。 B:要有<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>重写。 其实没有也是可以的,但是如果没有这个就没有意义。 动物 d = new 猫(); d.show(); 动物 d = new 狗(); d.show(); C:要有<a href="https://www.jb51.cc/tag/fulei/" target="_blank" class="keywords">父类</a>引用指向子类对象。 父 f = new 子(); 用<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>体现一下多态。 多态中的成员访问特点: A:成员变量 编译看左边,运行看左边。 B:构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a> <span style="color: #ff0000;"&gt;创建子类对象的时候,访问<a href="https://www.jb51.cc/tag/fulei/" target="_blank" class="keywords">父类</a>的构造<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,对<a href="https://www.jb51.cc/tag/fulei/" target="_blank" class="keywords">父类</a>的数据进行初始化。</span> C:<span style="color: #ff0000;"&gt;成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a></span> 编译看左边,运行看<span style="color: #ff0000;"&gt;右边</span>。 D:静态<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a> 编译看左边,运行看左边。 (静态和类相关,算不上重写,所以,访问还是左边的) <span style="color: #ff0000;"&gt;<strong>由于成员<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>存在<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>重写,所以它运行看右边。

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Fu {
<span style="color: #0000ff;">public <span style="color: #0000ff;">int num = 100<span style="color: #000000;">;

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    System.out.println(</span>"show Fu"<span style="color: #000000;"&gt;);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; function() {
    System.out.println(</span>"function Fu"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class Zi <span style="color: #0000ff;">extends<span style="color: #000000;"> Fu {
<span style="color: #0000ff;">public <span style="color: #0000ff;">int num = 1000<span style="color: #000000;">;
<span style="color: #0000ff;">public <span style="color: #0000ff;">int num2 = 200<span style="color: #000000;">;

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {
    System.out.println(</span>"show Zi"<span style="color: #000000;"&gt;);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; method() {
    System.out.println(</span>"method zi"<span style="color: #000000;"&gt;);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; function() {
    System.out.println(</span>"function Zi"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">要有父类引用指向子类对象。
<span style="color: #008000;">//<span style="color: #008000;">父 f = new 子();
Fu f = <span style="color: #0000ff;">new<span style="color: #000000;"> Zi();
System.out.println(f.num);
<span style="color: #008000;">//<span style="color: #008000;">找不到符号
<span style="color: #008000;">//<span style="color: #008000;"> System.out.println(f.num2);
<span style="color: #000000;">
f.show();
<span style="color: #008000;">//<span style="color: #008000;">找不到符号
<span style="color: #008000;">//<span style="color: #008000;"> f.method();
<span style="color: #000000;"> f.function();
}
}

多态的好处:

代码的维护性(继承保证) B:提高了代码的扩展性(由多态保证)
猫狗案例<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>

<span style="color: #008000;">*/

//父类,动物类

<span style="color: #0000ff;">class<span style="color: #000000;"><span style="color: #ff0000;"> Animal {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat(){
System.out.println("eat"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep(){
    System.out.println(</span>"sleep"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class Dog <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat(){
System.out.println("狗吃肉"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep(){
    System.out.println(</span>"狗站着睡觉"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat() {
System.out.println("猫吃鱼"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep() {
    System.out.println(</span>"猫趴着睡觉"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class Pig <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat() {
System.out.println("猪吃白菜"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep() {
    System.out.println(</span>"猪侧着睡"<span style="color: #000000;"&gt;);
}

}

<span style="color: #008000;">//<span style="color: #008000;">针对动物操作的工具类
<span style="color: #0000ff;">class<span style="color: #000000;"> AnimalTool {
<span style="color: #0000ff;">private<span style="color: #000000;"> AnimalTool(){}
<span style="color: #ff0000;">//不管是什么对象,都是Animal类,这就叫多态拓展性
<span style="color: #0000ff;">public <span style="color: #ff0000;">static <span style="color: #0000ff;">void<span style="color: #000000;"> useAnimal(<span style="color: #ff0000;">Animal a) {
<span style="color: #ff0000;">a.eat();
a.sleep();
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> test {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">我喜欢猫,就养了一只
Cat c = <span style="color: #0000ff;">new<span style="color: #000000;"> Cat();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;我很喜欢猫,所以,又养了一只</span>
    Cat c2 = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Cat();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;我特别喜欢猫,又养了一只</span>
    Cat c3 = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Cat();

    AnimalTool.useAnimal(c);
    AnimalTool.useAnimal(c2);
    AnimalTool.useAnimal(c3);
    System.out.println(</span>"--------------"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;我喜欢狗</span>
    Dog d = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Dog();
    Dog d2 </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Dog();
    Dog d3 </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Dog();

    AnimalTool.useAnimal(d);
    AnimalTool.useAnimal(d2);
    AnimalTool.useAnimal(d3);
    System.out.println(</span>"--------------"<span style="color: #000000;"&gt;);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;我喜欢宠物猪
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;定义一个猪类,它要继承<a href="https://www.jb51.cc/tag/zidong/" target="_blank" class="keywords">自动</a>物,提供两个<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,并且还得在工具类中<a href="https://www.jb51.cc/tag/tianjia/" target="_blank" class="keywords">添加</a>该类<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a><a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a></span>
    Pig p = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Pig();
    Pig p2 </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Pig();
    Pig p3 </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Pig();

    AnimalTool.useAnimal(p);
    AnimalTool.useAnimal(p2);
    AnimalTool.useAnimal(p3);
    System.out.println(</span>"--------------"<span style="color: #000000;"&gt;);
    </span>

<span style="color: #000000;">
}
}

多态的弊端

功能。 "show fu"<span style="color: #0000ff;">class Zi <span style="color: #0000ff;">extends<span style="color: #000000;"> Fu {
<span style="color: #0000ff;">public
<span style="color: #0000ff;">void
<span style="color: #000000;"> show() {
System.out.println(
"show zi"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; method() {
    System.out.println(</span>"method zi"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiDemo3 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">测试
Fu f = <span style="color: #0000ff;">new<span style="color: #000000;"> Zi();
f.show();
f.method();<span style="color: #ff0000;">//编译看左边,但是左边的Fu没有method方法,会报错。不能使用子类的method方法
<span style="color: #000000;"> }
}

多态弊端的解决

功能。
我就想使用子类的特有<a href="https://www.jb51.cc/tag/gongneng/" target="_blank" class="keywords">功能</a>?行不行?
    行。

怎么用呢?
  <span style="color: #ff0000;"&gt;  A:创建子类对象<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a><a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>即可。(可以,但是很多时候不合理。而且,太占内存了)</span>
    <span style="color: #ff0000;"&gt;B:把<a href="https://www.jb51.cc/tag/fulei/" target="_blank" class="keywords">父类</a>的引用强制转换为子类的引用。(向下转型)</span>

对象间的转型问题:
   <span style="color: #ff0000;"&gt; 向上转型:
        Fu f = new Zi();
    向下转型:
        Zi z = (Zi)f; //要求该f必须是能够转换为Zi的。

<span style="color: #008000;">*/
<span style="color: #0000ff;">class<span style="color: #000000;"> Fu {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
System.out.println("show fu"<span style="color: #000000;">);
}
}

<span style="color: #0000ff;">class Zi <span style="color: #0000ff;">extends<span style="color: #000000;"> Fu {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
System.out.println("show zi"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; method() {
    System.out.println(</span>"method zi"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiDemo4 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">测试
Fu f = <span style="color: #0000ff;">new<span style="color: #000000;"> Zi();
f.show();
<span style="color: #008000;">//<span style="color: #008000;">f.method();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建子类对象
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Zi z = new Zi();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;z.show();
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;z.method();

    </span><span style="color: #ff0000;"&gt;//你能够把子的对象赋值给父亲,那么我能不能把父的引用赋值给子的引用呢?
    //如果可以,但是如下
    Zi z =</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; (Zi)f;
    z.show();
    z.method();</span>
}

}

多态问题的理解:

age = 40 </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; teach() { System.out.println(</span>"讲解JavaSE"<span style="color: #000000;"&gt;); } } </span><span style="color: #0000ff;"&gt;class</span> 孔子 <span style="color: #0000ff;"&gt;extends</span><span style="color: #000000;"&gt; 孔子爹 { </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span> age = 20<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; teach() { System.out.println(</span>"讲解论语"<span style="color: #000000;"&gt;); } </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; playGame() { System.out.println(</span>"英雄联盟"<span style="color: #000000;"&gt;); } } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;Java特别火,很多人来请孔子爹去讲课,这一天孔子爹被请走了 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;但是还有人来请,就剩孔子在家,价格还挺高。孔子一想,我是不是可以考虑去呢? </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;然后就穿上爹的衣服,带上爹的眼睛,粘上爹的胡子。就开始装爹 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;向上转型</span> 孔子爹 k爹 = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; 孔子(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;到人家那里去了</span> System.out.println(k爹.age); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;40</span> k爹.teach(); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;讲解论语 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;k爹.playGame(); </span><span style="color: #ff0000;"&gt;//这是儿子才能做的 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;讲完了,下班回家了 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;脱下爹的装备,换上自己的装备 </span><span style="color: #008000;"&gt;//</span><span style="color: #ff0000;"&gt;向下转型</span> <span style="color: #ff0000;"&gt;孔子 k =</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; (孔子) k爹;</span> System.out.println(k.age); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;20</span> k.teach(); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;讲解论语</span> k.playGame(); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;英雄联盟</span></pre>

多态继承中的内存讲解:

 

 多态中的对象变化内存图解:

多态中类转换异常:

<span style="color: #0000ff;">class Dog <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public
<span style="color: #0000ff;">void
<span style="color: #000000;"> eat() {}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; lookDoor() {

}

}

<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat() {

}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; playGame() {

}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiDemo5 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">内存中的是狗
Animal a = <span style="color: #0000ff;">new<span style="color: #000000;"> Dog();
Dog d =<span style="color: #000000;"> (Dog)a;

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;内存中是猫</span>
    a = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Cat();
    Cat c </span>=<span style="color: #000000;"&gt; (Cat)a;

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;内存中是猫</span>
    <span style="color: #ff0000;"&gt;Dog dd = (Dog)a; //ClassCastException</span>

<span style="color: #000000;"> }
}

猫狗案例
"吃饭"<span style="color: #0000ff;">class Dog <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public
<span style="color: #0000ff;">void
<span style="color: #000000;"> eat() {
System.out.println(
"狗吃肉"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; lookDoor() {
    System.out.println(</span>"狗看门"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat() {
System.out.println("猫吃鱼"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; playGame() {
    System.out.println(</span>"猫捉迷藏"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiTest {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">定义为狗
Animal a = <span style="color: #0000ff;">new<span style="color: #000000;"> Dog();
a.eat();
System.out.println("--------------"<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">还原成狗
Dog d =<span style="color: #000000;"> (Dog)a;
d.eat();
d.lookDoor();
System.out.println("--------------"<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">变成猫
a = <span style="color: #0000ff;">new<span style="color: #000000;"> Cat();
a.eat();
System.out.println("--------------"<span style="color: #000000;">);
<span style="color: #008000;">//<span style="color: #008000;">还原成猫
Cat c =<span style="color: #000000;"> (Cat)a;
c.eat();
c.playGame();
System.out.println("--------------"<span style="color: #000000;">);

    </span><span style="color: #ff0000;"&gt;//演示<a href="https://www.jb51.cc/tag/cuowu/" target="_blank" class="keywords">错误</a>的<a href="https://www.jb51.cc/tag/neirong/" target="_blank" class="keywords">内容</a>
    //Dog dd = new Animal();
    //Dog ddd = new Cat();

    //ClassCastException
    //Dog dd = (Dog)a;//这个编译不报错,运行才报错</span>

<span style="color: #000000;"> }
}

不同地方饮食文化不同的案例
"吃饭"<span style="color: #0000ff;">class SouthPerson <span style="color: #0000ff;">extends<span style="color: #000000;"> Person {
<span style="color: #0000ff;">public
<span style="color: #0000ff;">void
<span style="color: #000000;"> eat() {
System.out.println(
"炒菜,吃米饭"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; jingShang() {
    System.out.println(</span>"经商"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class NorthPerson <span style="color: #0000ff;">extends<span style="color: #000000;"> Person {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> eat() {
System.out.println("炖菜,吃馒头"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; yanJiu() {
    System.out.println(</span>"研究"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiTest2 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">测试
<span style="color: #008000;">//<span style="color: #008000;">南方人
Person p = <span style="color: #0000ff;">new<span style="color: #000000;"> SouthPerson();
p.eat();
System.out.println("-------------"<span style="color: #000000;">);
<span style="color: #ff0000;">SouthPerson sp <span style="color: #ff0000;">=<span style="color: #000000;"><span style="color: #ff0000;"> (SouthPerson)p;
sp.eat();
<span style="color: #ff0000;"> sp.jingShang();
System.out.println("-------------"<span style="color: #000000;">);

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;北方人</span>
    p = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; NorthPerson();
    p.eat();
    System.out.println(</span>"-------------"<span style="color: #000000;"&gt;);
    <span style="color: #ff0000;"&gt;NorthPerson np </span></span><span style="color: #ff0000;"&gt;=</span><span style="color: #000000;"&gt;<span style="color: #ff0000;"&gt; (NorthPerson)p;</span>
    np.eat();
    <span style="color: #ff0000;"&gt;np.yanJiu();</span>
}

}

看程序,出结果:

多态的成员访问特点: <span style="color: #ff0000;"&gt;<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>:编译看左边,运行看右边。</span> 继承的时候: 子类中有和<a href="https://www.jb51.cc/tag/fulei/" target="_blank" class="keywords">父类</a>中一样的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,叫重写。 <span style="color: #ff0000;"&gt;子类中没有父亲中出现过的<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>,<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>就被继承过来了。

<span style="color: #008000;">/
<span style="color: #0000ff;">class<span style="color: #000000;"> A {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
show2();
}
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show2() {
System.out.println("我"<span style="color: #000000;">);
}
}
<span style="color: #0000ff;">class B <span style="color: #0000ff;">extends<span style="color: #000000;"> A {
<span style="color: #008000;">/
<span style="color: #ff0000;">
public void show() {
show2();
}
*/

<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show2() {
    System.out.println(</span>"爱"<span style="color: #000000;"&gt;);
}

}
<span style="color: #0000ff;">class C <span style="color: #0000ff;">extends<span style="color: #000000;"> B {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
<span style="color: #0000ff;">super<span style="color: #000000;">.show();
}
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show2() {
System.out.println("你"<span style="color: #000000;">);
}
}
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> DuoTaiTest4 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
A a = <span style="color: #0000ff;">new<span style="color: #000000;"> B();
a.show();

    B b </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; C();
    b.show();
}

}

 

原文链接:https://www.f2er.com/java/403346.html

猜你在找的Java相关文章