Thinking in java--随笔
来源:互联网 发布:卡尔曼滤波算法 应用 编辑:程序博客网 时间:2024/06/05 23:04
“覆盖”私有方法
public class Father { private void fun(){ System.out.println("Father"); } public static void main(String[] args) { Father f = new Child(); f.fun(); }}class Child extends Father{ public void fun(){ System.out.println("Child"); }}
很多人会认为输出的结果为:Child。但是,实际上输出结果为:Father.因为private方法被自动认定为final方法,它对导出类是隐藏的,所以Child中的fun()方法就是一个全新的方法,既然Father中的fun()方法对于导出类是不可见的,所以不能被重载。
域与静态方法
class Super{ public int field = 0; public int getField(){ return field; }}class Sub extends Super{ public int field = 1; public int getField(){ return field; } public int getSuperField(){ return super.field; }}public class FieldAccess { public static void main(String[] args) { Super sup = new Sub(); System.out.println("sup.field = "+sup.field+",sup.getField = "+sup.getField()); Sub sub = new Sub(); System.out.println("sub.field = "+sub.field+",sub.getField = "+sub.getField()+",sub.getSuperField = "+sub.getSuperField()); }}
结果:
sup.field = 0,sup.getField = 1
sub.field = 1,sub.getField = 1,sub.getSuperField = 0
当Sub对象转型为Super引用时,任何域访问操作都将由编译器解析,因此不是多态的。
在本例中,为Super.field和Sub.field分配了不同的存储空间。这样,Sub实际上包含了两个称为field的域:它自己的和它从Super处得到的。然而,在引用Sub中的field时所产生的默认域并非Super版本的field域,因此,为得到Super.field,必须显式地指明super.field。
如果某个方法是静态的,它的行为就没有多态性
class StaticSuper{ public static String staticGet(){ return "Base staticGet"; } public String dynamicGet(){ return "Base dynamicGet"; }}class StaticSub extends StaticSuper{ public static String staticGet(){ return "Derived staticGet"; } public String dynamicGet(){ return "Derived dynamixGet"; }}public class StaticPolymorphism { public static void main(String[] args) { StaticSuper sup = new StaticSub(); System.out.println(sup.staticGet()); System.out.println(sup.dynamicGet()); }}
Base staticGetDerived dynamixGet
静态方法是与类,而并非与单个的对象相关联。
阅读全文
5 0
- [thinking in java]随笔
- 《THINKING IN JAVA》随笔
- 《THINKING IN JAVA》随笔
- 《THINKING IN JAVA》随笔
- 《THINKING IN JAVA》随笔
- 《THINKING IN JAVA》随笔
- Thinking in java--随笔
- [Java]Thinking in Java
- Thinking in Java笔记
- 《Thinking in Java》读书笔记
- Thinking in java(1)
- Thinking in JAVA websites
- Thinking in java 笔记
- Thinking In Java (一)
- Thinking In Java (二)
- Thinking in Java 8
- Thinking in Java 12
- 学习 thinking in java
- POJ
- 有你真好
- 深入分析ConcurrentHashMap
- Java web 之 Spring+Mybatis+Spring MVC框架整合(上)
- 设计模式笔记
- Thinking in java--随笔
- 目录及文件的基本操作
- Kotlin数组容器
- C++中的类所占内存空间总结(极力推荐!!!!!细细研读!!!!)
- 数据结构与算法——1.3算法
- Mysql 忘记root密码的完美解决方法
- html页面中的Viewport设置
- CTF web题总结--绕过正则表达式
- 推荐一些学习网站