• java中对象多态时成员变量,普通成员函数及静态成员函数的调用情况


    /*
    样例1:
      class Parent{
         int num = 3;
      }
    
      class Child extends Parent{
         int num = 4;
      }
    */
    
    /*
    样例2:
    class Parent{
    
    }
    
    class Child extends Parent{
        int num = 4;
    }
    */
    
    /*
    样例3:
    class Parent{
        void show(){
    	    System.out.println("Parent Show!");
    	 }
      }
    
      class Child extends Parent{
    	void show(){
    	    System.out.println("Child Show!");
    	 }
      }
    */
    
    /*
    样例4:
    class Parent{
       
      }
    
      class Child extends Parent{
    	void show(){
    	    System.out.println("Child Show!");
    	 }
      }
    */
    
    
    class Parent{
        static void show(){
    	    System.out.println("Parent Show!");
    	 }
      }
    
      class Child extends Parent{
    	static void show(){
    	    System.out.println("Child Show!");
    	 }
      }
    
    
    public class PC{
       public static void main(String[] args){
            Parent p = new Child();
    		//样例1:
    		//System.out.println(p.num);// 3, 输出的是父类的num;
    		
    		//样例2:
    		//System.out.println(p.num);// 错误: 找不到符号 num
    		
    		//样例3:
    		//p.show();//Child Show!  输出的是子类的方法!
    		
    		//样例4:
    		//p.show();//  错误: 找不到符号   p.show();
    		
    		//样例5:
    		p.show();// Parent Show!  运行父类的静态方法。
       }  
    }
    
    /*
    总结:
    对象多态时:
    1.成员变量:(不涉及覆盖)
    编译时: 参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过,没有,编译失败。
    运行时: 参考引用变量所属的类中是否有调用的成员变量, 并运行该类所属中的成员变量。
    简单的说:编译和运行都参考等号的左边。
    2.成员函数(非静态):
    编译时:参考引用变量所属的类中是否有调用的成员变量, 有, 编译通过, 没有,编译失败:
    运行时:参考的是对象所属的类中是否有调用的函数。
    简单的说:编译看左边, 运行看右边。
    3.静态函数, 变量:
       编译和运行都是参考左边参数类型!
       其实静态方法不存在多态, 静态方法是属于类的,我们说的是对象的多态!静态方法直接用类名调用就好了,
       没必要创建对象!	
       静态的方法只能被静态的方法所覆盖!
    
    */
    

      

  • 相关阅读:
    魔法变量*args 和 **kwargs
    windows下怎么安装protobuf for python
    正向代理与反向代理
    Python 中 "is" 与 "==" 操作有什么区别?
    用 Anaconda 完美解决 Python2 和 python3 共存问题
    Python爬虫实例
    安装包制作工具 SetupFactory使用2 API清单
    软件测试流程(Test Flow)
    从一个实例详解敏捷测试的最佳实践
    网络常用基础知识大全
  • 原文地址:https://www.cnblogs.com/hujunzheng/p/3872619.html
Copyright © 2020-2023  润新知