牛客网的评论中的,感觉总结的挺好的。

 1 public class A {
 2     public static String staticStr = "A's static field";
 3     public String nonStaticStr = "A's nonstatic field";
 4     public static void staticMethod(){
 5         System.out.println("A's static method");
 6     }
 7     public void nonStaticMethod(){
 8         System.out.println("A's nonstatic method");
 9     }
10 }
11 public class B extends A{
12     public static String staticStr = "B's static field";
13     public String nonStaticStr = "B's nonstatic field";
14     public static void staticMethod(){
15         System.out.println("B's static method");
16     }
17 }
18 public class C extends A{
19
20 }
21 public class Test {
22     public static void main(String[] args) {
23         C c = new C();
24         System.out.println(c.nonStaticStr);  //A's nonstatic field
25         System.out.println(c.staticStr);  //A's static field
26         c.staticMethod(); //A's static method
27
28         System.out.println("-------------------------------");
29
30         A c1 = new C();
31         System.out.println(c1.nonStaticStr);  //A's nonstatic field
32         System.out.println(c1.staticStr);  //A's static field
33         c1.staticMethod(); //A's static method
34
35         // 以上这说明java中静态属性和静态方法可以被继承
36
37         System.out.println("-------------------------------");
38         B b = new B();
39         System.out.println(b.nonStaticStr); // B's nonstatic field
40         System.out.println(b.staticStr);   //B's static field
41         b.staticMethod();  //B's static method
42
43         System.out.println("-------------------------------");
44         A b1 = new B();
45         System.out.println(b1.nonStaticStr);  //A's nonstatic field
46         System.out.println(b1.staticStr);  //A's static field
47         b1.staticMethod(); //A's static method
48         //b1.nonStaticStr  输出的是父类的非静态属性,说明非静态属性不可以被重写,不能实现多态
49         //b1.staticStr     输出的是父类的静态属性,说明静态属性不可以被重写,不能实现多态
50         //b1.staticMethod()输出的是父类A的静态方法,不是子类B改写后的,所以没有实现多态
51
52
53         //结论是:静态属性和静态方法只是可以继承没有表现出多态性。
54         //因为静态方法和静态属性没有采用动态绑定。具体表现就是,
55         //将子类实例向上转型则会调用到基类中的静态方法和属性,
56         //不转型就调用子类自身的静态方法和属性。
57         //编译器不推荐通过实例去调用静态方法和属性,因为这种调用方式容易造成混淆。
58
59         //实际上,在Java的规范中,Java对于类的方法和属性采用了两种完全不同的处理机制:
60         //对于方法,使用重载机制实现了多态性;对于属性,使用的是同名属性隐藏机制。
61         //所谓的同名属性隐藏机制是指:在具有父子关系的两个类中,
62         //子类中相同名字的属性会使得从父类中继承过来的同名属性变得不可见,
63         //不管类型是否一致,名称一致的两个属性就是同名属性。
64         //在子类中,无法简单地通过属性名称来获取父类中的属性,
65         //而是必须通过父类名称加属性名称(super.变量名)的方法才可以访问父类中的该属性。
66         //一般而言,为了代码容易阅读,极其不建议在父类和子类中使用同名属性。
67     }
68
69 }

转载于:https://www.cnblogs.com/sjxbg/p/8891997.html

父子类中静态方法和属性实现相关推荐

  1. 【Infragistics教程】在javascript类中添加静态成员属性

    2019独角兽企业重金招聘Python工程师标准>>> [下载Infragistics Ultimate最新版本] 在一个javascript类中创建一个属性的需求,它需要被所有对象 ...

  2. python类的属性和对象属性_在python的类中动态添加属性与生成对象

    本文将通过一下几个方面来一一进行解决 1.程序的主要功能 2.实现过程 3.类的定义 4.用生成器generator动态更新每个对象并返回对象 5.使用strip 去除不必要的字符 6.rematch ...

  3. C++改变基类成员在派生类中的访问属性

    使用using声明可以改变基类成员在派生类中的访问属性.我们知道基类的公有成员经过公有继承,在派生类中其属性为public的,但是通过using 声明,我们可以将其改为private或protecte ...

  4. php类如何变为静态调用,PHP类中静态方法如何调用非静态方法?_后端开发

    php如何将字符串转成json_后端开发 php将字符串转成json的方法是:可以通过json_encode()函数来实现.json_encode()函数用于对变量进行JSON编码,该函数如果执行成功 ...

  5. Python类中的私有属性和私有方法

    Python类中的私有属性和私有方法 Python是面向对象的语言,在Python里一切皆对象,所以大部分情况下,我们都是通过类的方式来编程. 但是Python中的属性和方法在类的外部默认是可以访问的 ...

  6. 4.3调整基类成员在派生类中的访问属性的方法

    同名成员 在定义派生类的时候,C++语言允许派生类与基类中的函数名相同.如果在派生类中定义了与基类中相同的成员,则称派生类成员覆盖了基类的同名成员,在派生类中使用这个名字意味着访问在派生类中重新说明的 ...

  7. POJO类中布尔类型属性的定义与命名

    阿里Java开发手册中强制规定: 而不类型的变量名不要使用isXxx的格式.因为布尔类型属性的getter方法与其他类型的不一样,是isSuccess(),如果在变量名之前加上is的话,属性名与方法名 ...

  8. swagger参数注解,后台使用@RequestBody注解的实体类,但只需要传实体类中的一个属性

    一开始是这个样子的 @ApiOperation(value = "删除用户", notes = "根据用户名删除指定用户", httpMethod = &quo ...

  9. c++模板类静态成员变量_一文讲透父子类中静态变量,成员变量初始化顺序原理...

    推荐: 从面试到入职到离职,我在B站工作的30天时光 爱了爱了,Alibaba顶级MySQL调优手册到手,加薪妥了 爱了爱了,Spring Cloud Alibaba内部微服务架构笔记真的太牛了 本文 ...

  10. python 类静态属性_如何从Python中的类中引用静态属性?

    您面临的问题是因为您不了解类声明的作用域是如何工作的.类声明在其自己的作用域内执行.执行完成后,将创建一个新的类对象,并将获得的范围作为其__dict__附加到该类.在 注意:类范围是从方法范围内搜索 ...

最新文章

  1. 我们来谈下高并发和分布式中的幂等处理
  2. 推荐5款学Java开发的必备工具
  3. CodeFirst EF中导航属性的个人理解
  4. MessagePack Java Jackson Dataformat 在 Map 中不使用 String 为 Key 的序列化
  5. C#使用Xamarin开发可移植移动应用进阶篇(8.打包生成安卓APK并精简大小),附源码
  6. OpenGL ES 纹理设置
  7. python查找两个数组中相同的元素_匹配两个numpy数组以找到相同的元素
  8. linux mysql general_利用mysql general log 写shell 可行性简要分析
  9. Kotlin学习笔记 第二章 类与对象 第九节 泛型
  10. ‘nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  11. nginx服务器防sql注入/溢出***/spam及禁User-agents
  12. Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core“
  13. mysql 中的升序和降序
  14. 小猪短租网多个价格的查找,requests库,o( ̄ヘ ̄o#)bs4库的简单使用
  15. 安徽省二级计算机证书,在哪个网站打印安徽省二级计算机证书?
  16. Long memory is important: A test study on deep-learning based car-following model
  17. CSS 图片偏移技术以及坐标问题
  18. c++小组实践大作业——面包星推荐
  19. 网络最大流模板(标号法)
  20. python在线编程平台-在线python编程

热门文章

  1. kaldi在java中运行_Kaldi语音识别CVTE模型实战
  2. istio sidecar流量接管_istio 常见的 10 个异常
  3. 图像空域增强:灰度映射法
  4. 数据清洗+特征构造:application_{train|test}.csv
  5. Zoox 的自动驾驶汽车方法
  6. 算法:动态规划解决爬楼梯Climbing Stairs python3
  7. Charles 4.2 HTTPS抓包,乱码设置,证书信任,证书安装
  8. 基于用户画像的商品推荐挑战赛
  9. 402.移掉K位数字
  10. 138.复制带随机指针的链表