Java中静态属性、静态方法继承重写的那点破事
来源:互联网 发布:彩虹秒赞域名授权系统 编辑:程序博客网 时间:2024/06/06 03:24
public class A { public static String staticStr = "A's static field"; public String nonStaticStr = "A's nonstatic field"; public static void staticMethod(){ System.out.println("A's static method"); } public void nonStaticMethod(){ System.out.println("A's nonstatic method"); } } public class B extends A{ public static String staticStr = "B's static field"; public String nonStaticStr = "B's nonstatic field"; public static void staticMethod(){ System.out.println("B's static method"); } } public class C extends A{}public class Test { public static void main(String[] args) { C c = new C(); System.out.println(c.nonStaticStr); //A's nonstatic field System.out.println(c.staticStr); //A's static field c.staticMethod(); //A's static method System.out.println("-------------------------------"); A c1 = new C(); System.out.println(c1.nonStaticStr); //A's nonstatic field System.out.println(c1.staticStr); //A's static field c1.staticMethod(); //A's static method // 以上这说明java中静态属性和静态方法可以被继承 System.out.println("-------------------------------"); B b = new B(); System.out.println(b.nonStaticStr); // B's nonstatic field System.out.println(b.staticStr); //B's static field b.staticMethod(); //B's static method System.out.println("-------------------------------"); A b1 = new B(); System.out.println(b1.nonStaticStr); //A's nonstatic field System.out.println(b1.staticStr); //A's static field b1.staticMethod(); //A's static method //b1.nonStaticStr 输出的是父类的非静态属性,说明非静态属性不可以被重写,不能实现多态 //b1.staticStr 输出的是父类的静态属性,说明静态属性不可以被重写,不能实现多态 //b1.staticMethod()输出的是父类A的静态方法,不是子类B改写后的,所以没有实现多态 //结论是:静态属性和静态方法只是可以继承没有表现出多态性。 //因为静态方法和静态属性没有采用动态绑定。具体表现就是, //将子类实例向上转型则会调用到基类中的静态方法和属性, //不转型就调用子类自身的静态方法和属性。 //编译器不推荐通过实例去调用静态方法和属性,因为这种调用方式容易造成混淆。 //实际上,在Java的规范中,Java对于类的方法和属性采用了两种完全不同的处理机制: //对于方法,使用重载机制实现了多态性;对于属性,使用的是同名属性隐藏机制。 //所谓的同名属性隐藏机制是指:在具有父子关系的两个类中, //子类中相同名字的属性会使得从父类中继承过来的同名属性变得不可见, //不管类型是否一致,名称一致的两个属性就是同名属性。 //在子类中,无法简单地通过属性名称来获取父类中的属性, //而是必须通过父类名称加属性名称(super.变量名)的方法才可以访问父类中的该属性。 //一般而言,为了代码容易阅读,极其不建议在父类和子类中使用同名属性。 } }
阅读全文
1 0
- Java中静态属性、静态方法继承重写的那点破事
- 关于java中静态属性、静态方法的继承问题
- java重写和重载那点破事
- JAVA,假重写,方法假重写,继承父类时的静态方法假重写,静态方法假重写
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java中静态属性和和静态方法的继承问题以及多态的实质
- java中静态属性和和静态方法的继承问题 以及多态的实质
- java 静态(static)方法的继承和重写
- JAVA中子类是否可以可以继承、重写父类的静态方法--总结
- 关于Java中子类能否继承和重写父类的静态方法问题
- 静态(static)方法的继承和重写
- 静态(static)方法的继承和重写
- 静态(static)方法的继承和重写
- 静态(static)方法的继承和重写
- Java中static静态类和静态方法隐藏、重写、继承
- Java中静态变量与静态方法的继承
- FTP上传文件到云服务器上的工具类
- 电视重显率的两种调节方式
- Bandwidth UVa 140
- 机器学习中标称型数据和数值型数据的区别
- 图片上传功能之~百度编辑器单独作为图片上传文件上传功能,百度编辑器做缩略图
- Java中静态属性、静态方法继承重写的那点破事
- 读书笔记 之 《阿里巴巴Java开发手册》
- spring boot 的常用注解使用 总结
- springmvc 获取http参数
- Linux的任督二脉:进程调度和内存管理
- ORA 12542:没有监听器
- 2017年度总结
- 多目标
- [LWIP学习]--bind函数分析