多态

阅读量: 6 编辑

一、多态介绍

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

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

  • List list = new LinkedList();

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

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

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

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

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

  • List list = new ArrayList();

二、编程实战

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

Person.java

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

Girl.java

/**
 * 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

/**
 * 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

/**
 * 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());
    }
}

爱码岛编程公众号
试卷资料
爱码岛编程小程序
在线刷题
苏ICP备13052010号
©2023 南京匠成信息科技有限公司