专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Java——多态例题

class A {
    public String show(D obj) {
        return ("A and D");
    }
    public String show(A obj) {
        return ("A and A");
    }
}

class B extends A {
    public String show(B obj) {
        return ("B and B");
    }
    public String show(A obj) {
        return ("B and A");
    }
}

class C extends B {
}

class D extends B {
}

public class Demoduotai {

    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println(a1.show(b));//A and A B向上转型A
        System.out.println(a1.show(c));//A and A C向上转型A
        System.out.println(a1.show(d)); //A and D
        System.out.println();
        /*
         * A a2 = new B(); 这里a2的引用类型是A,但是它指向的内存是类型为B的一个实例 
         * 想对a2进行方法调用,
         * 你调用的方法都必须在class A里面有的才行 (因为你的引用类型为A) 
         * 这里 class A有 show(A obj) show(D obj)着两个方法
         * a2.show(b) 在class A中没有找到类型匹配的方法,
         * 但是对b进行向上转型后, 可以找到 show(A obj)方法
         * 但是a2内存地址指向一个类型为B内存空间
         * 如果class B Override 了 class A的show(A  obj)方法,则调用B的show(A obj)方法
         */
        System.out.println(a2.show(b));// class A中没有show(b)这个方法,但是由于B是A的之类,可以进行向上转型为A,可以找到show(A obj)方法,但是a2内存地址指向一个类型为B内存空间,并且classB 重写了class A的show(A obj)方法,则调用B的show(A obj)方法
        System.out.println(a2.show(c));// class A中没有show(c)这个方法,但是由于C是B的之类,B是A的之类,可以进行向上转型为A,可以找到show(A obj)方法,但是a2内存地址指向一个类型为B内存空间,并且classB 重写了class A的show(A obj)方法,则调用B的show(A obj)方法
        System.out.println(a2.show(d));// class A中没有show(c)这个方法,但是由于D是B的之类,B是A的之类,可以进行向上转型为A,可以找到show(A obj)方法,但是a2内存地址指向一个类型为B内存空间,并且classB 重写了class A的show(A obj)方法,则调用B的show(A obj)方法
        System.out.println();
        System.out.println(b.show(b));//直接调用B的show(B obj)方法
        System.out.println(b.show(c));//C向上转型为B,调用B的show(B obj)方法
        System.out.println(b.show(d));//java中这里精准匹配到A的show(D obj)方法,因为A是B的父类;但是在C#中则不会调用B的父类中的方法,因为
    }                        //B b = new B();和A没有关系

}

  

运行结果:

A and A
A and A
A and D

B and A
B and A
A and D

B and B
B and B
A and D

  

文章永久链接:https://tech.souyunku.com/36229

未经允许不得转载:搜云库技术团队 » Java——多态例题

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们