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本身。

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

  • 相关阅读:
    C# is运算符
    C# unchecked运算符
    C#程序设计入门经典之C#的基本语法
    C# 数据类型
    C# 变量与常量
    C# 操作符与表达式
    关于TeeChart使用我会持续更新
    oracle查看表中否存在某字段,数据库是否存在某张表
    tchart
    ultragrid
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12022666.html
Copyright © 2011-2022 走看看