博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
父子类中静态方法和属性实现
阅读量:5330 次
发布时间:2019-06-14

本文共 2720 字,大约阅读时间需要 9 分钟。

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

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 field25         System.out.println(c.staticStr);  //A's static field26         c.staticMethod(); //A's static method27         28         System.out.println("-------------------------------"); 29            30         A c1 = new C(); 31         System.out.println(c1.nonStaticStr);  //A's nonstatic field32         System.out.println(c1.staticStr);  //A's static field33         c1.staticMethod(); //A's static method34           35         // 以上这说明java中静态属性和静态方法可以被继承36          37         System.out.println("-------------------------------"); 38         B b = new B(); 39         System.out.println(b.nonStaticStr); // B's nonstatic field40         System.out.println(b.staticStr);   //B's static field41         b.staticMethod();  //B's static method42          43         System.out.println("-------------------------------"); 44         A b1 = new B(); 45         System.out.println(b1.nonStaticStr);  //A's nonstatic field46         System.out.println(b1.staticStr);  //A's static field47         b1.staticMethod(); //A's static method48         //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

你可能感兴趣的文章
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
京东静态网页练习记录
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>