• 目录

多态

阅读量: 119 编辑

多态

一、多态的描述

  • 在Java中,对象变量是多态的。一个类型为Aclass的变量既可以指向类型为Aclass的对象,又可以指向Aclass的任何子类的对象。

    • List list = new ArrayList(); //实现为不同的子类

    • List list = new LinkedList();

  • 以多态的形式来传递参数,增强了参数类型的灵活性。

    • 比如:public void getName(Collection col);

    • 其中Collection就是接口,调用的时候可以传递任何的子类型,从而实现了多态

  • 一个对象只能有一种确切的数据类型(new的时候只能有一种类型)

  • 一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量不能访问子类中添加的属性和方法

    • List list = new ArrayList();

二、代码实战

代码的详细解读,可以参考视频教程

Person.java

package com.qicong.gj.c14;

/**
 * User: 祁大聪
 */
public class Person {
    private  String name = "Person";
    public void getName(){
        System.out.println("name = " + name);
    }
}

Girl.java

package com.qicong.gj.c14;

/**
 * User: 祁大聪
 */
public class Girl extends Person{

    @Override
    public void getName() {
        System.out.println("Girl name");
    }

    public void sing(){
        System.out.println("Girl.sing");
    }
}


Boy.java

package com.qicong.gj.c14;

/**
 * User: 祁大聪
 */
public class Boy extends  Person{

    @Override
    public void getName() {
        System.out.println("Boy name");
    }

    public void dance(){
        System.out.println("Boy.dance");
    }
}

测试类:Test.java

package com.qicong.gj.c14;

/**
 * User: 祁大聪
 */
public class Test {

    public void printPerson(Person p){
        p.getName();
    }

    public static void main(String[] args) {
        Person p = new Person();
//        p = new Girl(); 
        p = new Boy();   // 父类可以实例化为任何一种子类,就是多态的表现
        p.getName();
//        p.dance(); // 这里面声明为Person,不能调用Boy的函数

        Test t = new Test();
        t.printPerson(new Boy()); // 可以传递不同的子类做为参数
        t.printPerson(new Girl());
    }
}

  • 目录