zoukankan      html  css  js  c++  java
  • JAVA静态方法是否可以被继承?

    结论:java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.  
    原因:  
    1). 静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成对,不需要继承机制及可以调用。如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。  
    2). 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键)。有了继承和重写就可以实现父类的引用指向不同子类的对象。重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。  
    3). 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。非静态方法可以被继承和重写,因此可以实现多态。  
    

      

    package com.study.test;  
      
    public class A { //父类  
        public static String staticStr = "A静态属性";  
        public String nonStaticStr = "A非静态属性";  
        public static void staticMethod(){  
            System.out.println("A静态方法");  
        }  
        public void nonStaticMethod(){  
            System.out.println("A非静态方法");  
        }  
    }  
    package com.study.test;  
      
    public class B extends A{//子类B  
        public static String staticStr = "B改写后的静态属性";  
        public String nonStaticStr = "B改写后的非静态属性";  
        public static void staticMethod(){  
            System.out.println("B改写后的静态方法");  
        }  
    }  
    package com.study.test;  
      
    public class C extends A{//子类C继承A中的所有属性和方法  
      
    }  
    package com.study.test;  
      
    public class StaticExtendsTest {  
      
        public static void main(String[] args) {  
            C c = new C();  
            System.out.println(c.nonStaticStr);  
            System.out.println(c.staticStr);  
            c.staticMethod();//输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承  
              
            System.out.println("-------------------------------");  
              
            A c1 = new C();  
            System.out.println(c1.nonStaticStr);  
            System.out.println(c1.staticStr);  
            c1.staticMethod();//结果同上,输出的结果都是父类中的非静态属性、静态属性和静态方法,推出静态属性和静态方法可以被继承  
          
            System.out.println("-------------------------------");  
            B b = new B();  
            System.out.println(b.nonStaticStr);  
            System.out.println(b.staticStr);  
            b.staticMethod();  
              
            System.out.println("-------------------------------");  
            A b1 = new B();  
            System.out.println(b1.nonStaticStr);  
            System.out.println(b1.staticStr);  
            b1.staticMethod();//结果都是父类的静态方法,说明静态方法不可以被重写,不能实现多态  
        }  
      
    }  
  • 相关阅读:
    Git 基础
    SharePoint 2013 对象模型操作"网站设置"菜单
    SharePoint 2013 隐藏部分Ribbon菜单
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 设置自定义布局页
    SharePoint 2013 "通知我"功能简介
    SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
    SharePoint 禁用本地回环的两个方法
  • 原文地址:https://www.cnblogs.com/qianxinxu/p/6554106.html
Copyright © 2011-2022 走看看