zoukankan      html  css  js  c++  java
  • 50 多态,为什么总是要用父类引用指向子类对象?

    多态三要素:

    1.继承 2.重写父类方法 3.父类引用指向子类对象

    代码:

    package _20191211;
    /**
     * 多态
     * @author TEDU
     *
     */
    public class PolymorphicTest {
    /**
     *多态三要素:
     *1.继承
     *2.重写父类方法
     *3.父类引用指向子类对象
     */
    	public static void main(String[] args) {
    		Animal animal = new Animal();
    		animal.shout();//没有多态
    		Animal dog = new Dog();//3. 父类引用指向子类对象
    		dog.shout();//父类引用调用重写的方法,多态发生
    		//换个Cat试试
    		Animal cat = new Cat();
    		cat.shout();
    	}
    }
    
    class Animal{
    	public void shout() {
    		System.out.println("叫~");
    	}
    }
    
    class Dog extends Animal{//1.继承
    	@Override
    	public void shout() {// 2.重写父类方法
    		System.out.println("汪汪汪~");
    	}
    }
    
    class Cat extends Animal{
    	@Override
    	public void shout() {
    		System.out.println("喵喵喵~");
    	}
    }
    

      

    结果:

    叫~
    汪汪汪~
    喵喵喵~
    

      

    为什么总是要用父类引用指向子类对象?

    我们经常看到:List<String> list = new ArrayList<>();

    那么为什么总是这么写呢?为什么不用ArrayList<String> list = new ArrayList<>();呢?

    因为List接口下面除了ArrayList,还有Vector及其它子类,通常情况下,List下的方法及属性已经能满足需要了。如果使用后面这种方法,当我们需要将ArrayList改为Vector时,需要改动的地方就太多了。

    比如:

    //返回一个List

    public List getList(){

    ArraList list = new ArrayList();

    }

    后期我们需要改数据结构,改成Vector,那么只需将方法体中的代码改为

    Vector v = new Vector();

    return v;

    即可,无需修改整个方法,尤其当返回的list引用被大量使用时,只需要改返回该list引用的方法中的内容就可以,不需要改list本身。

    这种思想叫做面向接口编程。

  • 相关阅读:
    Spring笔记——装配Bean
    Spring笔记——Spring之旅
    浅读Vue-Router源码记录
    稍微整理ES2020(es11)新东西
    前端实现批量打包下载文件
    CSS常见的三栏灵活布局实现方法
    不吹不黑,学完这篇,PDF导出就没有问题了
    不吹不黑,学完这篇,Word导出就没问题了
    不吹不黑,学完这篇,excel导出就没问题了
    Sass预编译 减法及除法计算问题
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12022666.html
Copyright © 2011-2022 走看看