多态概念(一共三点满足就行)
1、 继承
2、程序运行时将子类对象赋值给父类
3、通过父类去调用子类的方法
一、父类类型做方法的参数
<span class="kwd">public<span class="pln"> <span class="kwd">class<span class="pln"> <span class="typ">Person<span class="pln"> <span class="pun">{</span></span></span></span></span></span></span>
<span class="com">// //人喂动物</span>
<span class="com">// public void feed(Dog dog) {</span>
<span class="com">// dog.eat();</span>
<span class="com">// }</span>
<span class="com">// </span>
<span class="com">// public void feed(Cat cat) {</span>
<span class="com">// cat.eat();</span>
<span class="com">// }</span>
<span class="pln"> <span class="kwd">public<span class="pln"> <span class="kwd">void<span class="pln"> feed<span class="pun">(<span class="typ">Animal<span class="pln"> animal<span class="pun">)<span class="pln"> <span class="pun">{</span></span></span></span></span></span></span></span></span></span></span>
<span class="pln"> animal<span class="pun">.<span class="pln">eat<span class="pun">();</span></span></span></span>
<span class="pln"> <span class="pun">}</span></span>
<span class="pun">}</span>
二、多态父类类型做返回值 简单工厂
缺点:破坏了开闭原则:对功能的扩展开放,对修改关闭(扩展功能的时候尽量不用动已经写好的代码)
三、类型转换
向上转型:子类转向父类
Animal animal = new Cat();animal.eat();
向下转型:父类转向子类(强制转换,假转)
// 向下转型(父类向子类转型) Animal animal1=new Animal(); Cat cat1 = new Cat(); Dog dog=new Dog();// 真转是会运行报错的// cat1= (Cat) animal1;// 假转就不会报错,什么是假转?就是先把子类转向父类,那父类就可以强制转换成子类// animal1=cat1;// cat1= (Cat) animal1;// cat1.run();// 向下转型假转,主要应用是去调用子类中特有的方法
instanceof关键字:判断是不是类型是否相等,相等返回true
equals方法重写的解读,要学会看懂什么意思
Original: https://www.cnblogs.com/hxbhxb/p/15480701.html
Author: 金涛骇浪
Title: 4、多态
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575236/
转载文章受原作者版权保护。转载请注明原作者出处!