JAVA中多态的“缺陷”
来源:互联网 发布:mac系统内存占用高 编辑:程序博客网 时间:2024/06/14 11:33
在JAVA中,多态也并非是所有事物都可以多态的发生,然而只有普通的方法调用是可以多态的,如果我们直接访问某个域,该访问就会在编译期进行解析,比如如下代码段:
package access;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 Field {public static void main(String[] args) {// TODO Auto-generated method stubSuper 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对象上转为Super引用时访问field域时仍然为0,此时的结果由编译器解析决定,不再拥有多态性,而方法getField()仍然具有多态性。
在实际编程中,我们通常首先应该将所有的域设置为private类型,不能直接访问它,只能通过方法调用的方式来访问,另外我们可能不会对基类中的域和导出类中的域赋予相同的名字,这样做十分容易混淆。
如果某个方法是静态的,它的行为也将不具备多态性,看如下一段代码:
package access;class StaticSuper{public static String staticGet(){return "Base staticGet()";}public String dynameicGet(){return "Base dynameicGet()";}}class StaticSub extends StaticSuper{public static String staticGet(){return "Derived staticGet()";}public String dynamicGet(){return "Derived dynameicGet()";}}public class StaticField {public static void main(String[] args) {// TODO Auto-generated method stubStaticSuper sup = new StaticSub();System.out.println(sup.staticGet());System.out.println(sup.dynameicGet());}}此程序的输出结果为:
静态方法是类,而并非与单个的对象相关联。
阅读全文
0 0
- JAVA中多态的“缺陷”
- java线程的缺陷
- java线程的缺陷
- java线程的缺陷
- java线程的缺陷
- JAVA线程的缺陷
- java线程的缺陷
- Java集合 asList的缺陷
- java中多态的一些缺陷以及方法调用绑定
- 用Java Applet保护网页的缺陷
- Java 线程/内存模型的缺陷
- Java中的Enum的使用缺陷分析
- 《Java解惑》陷阱和缺陷的目录
- Java Timer的缺陷 用ScheduledExecutorService替代
- Java集合细节:subList的缺陷
- Java集合细节:subList的缺陷
- java 多态的两个缺陷
- Java编程思想-多态的缺陷
- office 2010/2013激活工具及VS2013密钥
- Yii2 Lesson
- 转载-好用的linux软件合集
- android studio- java注释自己动手弄起来
- 刷题3
- JAVA中多态的“缺陷”
- java-ApiValueDemo
- java-SimpleDateFormatDemo & BirthDemo
- java-TransDemo
- 序列化对象为xml文件,将xml文件反序列化为对象
- 关于python ide
- 转载-android studio 各种问题
- [置顶]总结汇总
- PLC单按钮起停例程