zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    Learning R笔记(一)
    聚类效果评测-Fmeasure和Accuracy及其Matlab实现
    R—读取数据(导入csv,txt,excel文件)
    R-模式(mode)和类(class)
    SQL Saturday 北京将于7月25日举办线下活动,欢迎参加
    开启微软机器学习之旅(1)--如何从不同数据源将样本数据导入Azure Machine Learning Studio
    微软机器学习Azure Machine Learning入门概览
    JS常用方法
    搭建django环境
    接口测试基础
  • 原文地址:https://www.cnblogs.com/wugongzi/p/11233163.html
Copyright © 2011-2022 走看看