zoukankan      html  css  js  c++  java
  • 静态变量和静态方法能否被继承?静态变量能否被隐藏?静态方法能否被重写?

    (1)静态变量和静态方法是否可以被继承?
     1 class 父类{
     2     //静态变量和静态方法是否可以被继承??
     3     
     4     public static String 父类静态变量 = "我是父类静态变量";
     5     
     6     public static void 父类静态方法() {
     7         System.out.println("我是父类静态方法");
     8     }
     9     
    10 }
    11 
    12 class 子类 extends 父类{
    13     //
    14 }
    15 
    16 public class Test {
    17     //静态变量和静态方法是否可以被继承?
    18     
    19     public static void main(String[] args) {
    20         子类 子类的对象 = new 子类();
    21     //子类对象
    22         
    23         子类.父类静态方法();
    24     //子类通过类名调用继承的静态方法
    25         
    26         子类的对象.父类静态方法();
    27     //子类通过对象调用继承的静态方法
    28         
    29         String _1 = 子类.父类静态变量;
    30     //子类通过类名调用继承的静态变量
    31         
    32         System.out.println("子类.父类静态变量======"+_1);
    33         
    34         String _2 = 子类的对象.父类静态变量;
    35     //子类通过对象调用继承的静态变量
    36         
    37         System.out.println("子类的对象.父类的静态变量======"+_2);
    38     }
    39     
    40 }
    41 
    42 //代码的运行结果如下
    43 我是父类静态方法
    44 我是父类静态方法
    45 子类.父类静态变量======我是父类静态变量
    46 子类的对象.父类的静态变量======我是父类静态变量

     根据上述代码,父类的静态变量和静态方法是可以被子类继承的。

    (2)静态变量能否被隐藏?静态方法能否被重写?
     1 class 父类{
     2     //静态变量能否被隐藏?静态方法能否被重写?
     3     
     4     public static String 父类静态变量 = "我是父类静态变量";
     5     
     6     public static void 父类静态方法() {
     7         System.out.println("我是父类静态方法");
     8     }
     9     
    10 }
    11 
    12 class 子类 extends 父类{
    13     public static String 父类静态变量 = "我是子类静态变量";
    14     
    15     public static void 父类静态方法() {
    16         System.out.println("我是子类重写的静态方法");
    17     }
    18     
    19 }
    20 
    21 public class Test {
    22     //静态变量能否被隐藏?静态方法能否被重写?
    23     
    24     public static void main(String[] args) {
    25         子类 子类对象 = new 子类();
    26     //子类对象
    27         
    28         父类 子类的上转型对象 = new 子类();
    29     //子类对象上转型
    30         
    31         子类.父类静态方法();
    32     //子类通过类名调用重写的静态方法
    33         
    34          子类对象.父类静态方法();
    35     //子类对象调用重写的静态方法      
    36         
    37         子类的上转型对象.父类静态方法();
    38     //子类通过上转型对象调用重写的静态方法
    39         
    40         String _1 = 子类.父类静态变量;
    41     //子类通过类名调用子类的静态变量
    42         
    43         System.out.println("子类.父类静态变量======"+_1);
    44         
    45         String _2 = 子类对象.父类静态变量;
    46     //子类对象调用子类的的静态变量
    47         
    48         System.out.println("子类对象.父类静态变量======"+_2);
    49         
    50         String _3 = 子类的上转型对象.父类静态变量;
    51     //子类通过上转型对象调用隐藏的父类静态变量
    52         
    53         System.out.println("子类的上转型对象.父类的静态变量======"+_3);
    54     }
    55     
    56 }
    57 
    58 //代码的运行结果如下
    59 我是子类重写的静态方法
    60 我是子类重写的静态方法
    61 我是父类静态方法
    62 子类.父类静态变量======我是子类静态变量
    63 子类对象.父类静态变量======我是子类静态变量
    64 子类的上转型对象.父类的静态变量======我是父类静态变量

     通过上述代码来看,静态变量的确被隐藏了,用子类对象和子类上转型对象去调用静态变量结果是不同的。静态方法并不能够被重写,也被隐藏了,用子类对象和子类上转型对象调用静态方法结果是不同的。

     

    我查阅了许多博客,得出的结论是这样的:我们在用对象调用静态变量和静态方法其实是没有意义的,运行时只看这个所要用的静态变量和静态方法是哪个类的,用的就是哪个类里的静态变量和静态方法。

     

    综上所述,父类中的静态变量,静态方法会被子类继承,并且都会被子类同名的静态变量,静态方法所隐藏。我们在看代码的时候只需要看调用静态变量和静态方法的所属类来判断即可,而我们在使用静态变量和静态方法最好都使用类名去调用。

     

    参考博客:https://blog.csdn.net/gao_zhennan/article/details/72892946

         https://blog.csdn.net/fcability/article/details/17352109

         https://blog.csdn.net/dawn_after_dark/article/details/74357049

     

    学识浅薄,如有错误,恳请斧正,在下不胜感激。

  • 相关阅读:
    python14 1.带参装饰器 | wrapper 了了解 # 2.迭代器 ***** # 可迭代对象 # 迭代器对象 # for迭代器 # 枚举对象
    python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器
    python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
    python11 函数的定义,调用,分类
    python10--函数的来源,优点,定义,组成,使用(定义,调用)函数的分类,函数的返回值
    python1--计算机原理 操作系统 进制 内存分布
    python2 配置环境变量
    python3 数据类型
    Java创建线程的三种方式
    webhooks动态更新配置
  • 原文地址:https://www.cnblogs.com/yin-jie/p/10988114.html
Copyright © 2011-2022 走看看