JAVA多态中的隐藏和覆盖
Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型
- 编译时类型:由声明该变量时使用的类型决定
- 运行时类型:由该变量指向的对象类型决定
如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。
如 :
Father f = new Son();
Son是Father的子类,引用变量f就会出现编译时类型和运行时类型不一致的情况,编译时是Father类型的,运行时是Son类型。当变量的编译时类型和运行时类型不一致时,通过变量访问它所引用的对象的实例时,该实例变量的值由声明该变量的类型决定。通过变量访问它所引用的对象的方法时,该方法的行为由所引用的对象实际类型所决定。
使用f时:
- 获取static成员变量、成员变量、static方法使用的是Father中的类型
- 获取方法使用的是Son中的类型
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号