java 多态

Posted jizizh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 多态相关的知识,希望对你有一定的参考价值。

多态为java的三大特性之一,了解学习多态,将更了解java。

多态实现条件

  • 继承与重写(方法的多态性)
  • 接口(对象的多态性)
  • 抽象类与抽象方法(对象的多态性)

向上转型和向下转型

  • 向上转型:父类 父类对象 = 子类实例
  • 向下转型:子类 子类对象 = (子类)父类对象
  • 当父类需要调用子类的扩充方法时才需要向下转型
  • 向下转型之前必须要先向上转型

Test.java

abstract class A {//抽象类的多态
    abstract void printA();
}

class TestA extends A {
    void printA() {
        System.out.println("class TestA extends abstract A");
    }
    void printTestA() {
        System.out.println("printTestA methods");
    }
}

interface B {//接口的多态
    void printB();
}

class TestB implements B {
    public void printB() {
        System.out.println("class TestB implements B");
    }
    void printTestB() {
        System.out.println("printTestB methods");
    }
}

public class Test {
    public static void main(String []args){
        System.out.println("---------A-------");
        A a = new TestA();//向上转型:父类 父类对象 = 子类实例
        a.printA();
        //testa.printTestA();//会报错,向上转型,因为父类访问不了子类中方法
        TestA testa = (TestA)a;//向下转型:子类 子类对象 = (子类)父类实例,向下转型和向上转型是一体的
        testa.printTestA();
        System.out.println("---------B-------");
        TestB testb = new TestB();//不想用向上向下转型可直接用子类实现
        testb.printB();                                                                                                                                                                                      
        testb.printTestB();
    }
}

运行结果

技术图片

以上是关于java 多态的主要内容,如果未能解决你的问题,请参考以下文章

每个人单核苷酸多态性(SNP)形成的原因是啥?

多态性和动态铸造

Java多态——代码复用性

Java 多态

java多态/重载方法——一个疑难代码引发的讨论

Java 多态