`
qingcyangg
  • 浏览: 14700 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

常见的编程陷阱

阅读更多
原资料来自:http://lovewhzlq.iteye.com/blog/452605

1.
  public class PrivateOverride {  
  private void f() { System.out.println("private f()"); }  
  public static void main(String[] args) {  
    PrivateOverride po = new DerivedClass();  
    po.f();  
  }  
}  
 
class DerivedClass extends PrivateOverride {  
  public void f() { System.out.println("public f()"); }  
}  
//输出结果为:private f()
分析:private方法被自动认为是final方法,而且对于子类是屏蔽的,因此,DerivedClass类的f()方法是一个新方法,基类中的f()方法对于子类DerivedClass是不可见的,因此不能被重载,导致调用的是声明基类的f()方法。

2.直接访问某个域,这个访问将在编译期进行解析。
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(); // Upcast  
    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引用时,任何域访问操作都将由编译器解析,因此不是多态的。

Sub实际上包含两个称为field的域:它自己的和从Super继承来的。





3.如果某个方法是静态的,它的行为也不具有多态性。

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 dynamicGet()";  
  }  
}  
 
public class StaticPolymorphism {  
  public static void main(String[] args) {  
    StaticSuper sup = new StaticSub(); // Upcast  
    System.out.println(sup.staticGet());  
    System.out.println(sup.dynamicGet());  
  }  
}   
 
/* 输出结果: 
Base staticGet() 
Derived dynamicGet() 
*/ 
因为静态方法是和类相关联的,而不是某个对象。 


分享到:
评论

相关推荐

    Verilog与SystemVerilog编程陷阱:如何避免101个常犯的编码错误

    5. SystemVerilog新增的面向对象编程特性,如何正确使用以及避免常见的面向对象编程陷阱。 6. 验证过程中的常见错误,以及如何利用SystemVerilog的验证特性来减少错误。 7. 随机化测试的正确方法和最佳实践。 8. ...

    华为编程规范与案例(含面试题目)

    它可能会讨论最佳实践、设计模式以及如何避免常见编程陷阱。 5. **readmenow.txt**:虽然这不是编程规范的一部分,但通常在开源项目中,`README`文件用于介绍项目背景、安装步骤、使用方法等,对于理解和使用项目...

    C++语言99个常见编程错误pdf

    标题《C++语言99个常见编程错误》所指向的内容涉及C++编程中容易出现的错误与问题。书中通过实际编程经验总结了99个常见的编程错误,并针对这些错误提出了相应的解决方法和优化建议。通过学习和避免这些常见错误,...

    高质量C、CPP编程指南.rar

    11. **编码规范**:良好的编码习惯是写出高质量代码的前提,书中会涉及命名规则、注释标准、代码格式化以及避免常见编程陷阱。 12. **性能优化**:讲解如何通过算法选择、内存管理、编译器优化选项等手段提高程序...

    问题解答汇总以及编程精华

    这种练习可以帮助学习者识别和避免常见编程陷阱,增强调试技能。 7. **解答集**:资源中提供的解答集可能是对上述编程题和理论问题的官方或专家解答,这为学习者提供了参考和学习的标准答案,有助于理解和消化知识...

    Programming Pearls 编程珠玑 英文版 文字版

    3. **编程效率**:讨论了如何编写简洁、高效、可读性强的代码,以及避免常见编程陷阱的方法。 4. **数据结构**:深入探讨了数组、链表、树、图等数据结构的特性,以及如何根据问题选择合适的数据结构。 5. **错误...

    delphi编程小助手

    此外,它还能帮助开发者避免因错误使用函数而导致的常见编程陷阱。 五、实践应用 在实际项目开发中,"Delphi编程小助手"可以帮助解决各种问题,例如,当需要处理文件操作时,可以迅速查询相关的I/O函数;在设计用户...

    Apple Swift编程语言入门教程

    Swift采用了一种称为“安全编程模式”的设计,旨在消除可能导致运行时错误的常见编程陷阱。此外,Swift还引入了诸如可选类型、类型推断等现代编程语言特性,以提高开发效率。 2. **Swift入门** 学习Swift通常从...

    高质量c++编程指南 v1.1.zip

    这份指南可能还包含了实例分析、代码示例以及常见编程陷阱的讨论,以帮助读者更好地理解和应用这些知识。通过学习和遵循《高质量C++编程指南》中的原则和建议,开发者可以编写出更可靠、更易维护的C++软件,提高团队...

    C语言陷阱解读

    #### 四、常见编程陷阱实例 ##### 4.1 指针陷阱 指针是C语言的强大特性之一,但也是最容易出错的地方。例如,忘记初始化指针或释放内存后仍尝试访问这些指针会导致程序崩溃。 ```c int *p; *p = 10; // 错误:未...

    微软C编程精粹(Microsoft Techniques for Developing Bug-free C Program)

    "附录A、B、C"可能包含补充信息,如常见编程陷阱、资源列表或者更深入的技术细节。 总的来说,《微软C编程精粹》提供了实用的指导,帮助开发者提高代码质量,降低软件缺陷,是C程序员不可或缺的参考书籍。通过学习...

    c语言编程中常见的陷阱和漏洞

    本篇文章将深入探讨一些常见的C语言陷阱和漏洞,并提供避免它们的策略。 1. **类型转换陷阱**:C语言对类型转换的处理比较宽松,不自动进行类型提升可能导致数据丢失或溢出。例如,将大整数赋值给小整数类型时,高...

    林瑞高质量编程指南(答案)

    【林瑞高质量编程指南】是一本旨在教导程序员如何编写高质量代码的书籍,它涵盖了编程规范、常见编程陷阱以及一些特定编程语言(如C++/C)的细节。以下是基于题目内容整理的一些关键知识点: 1. **布尔变量与零值...

    全国计算机等级考试二级C语言上级题库

    理解和运用C语言的错误处理机制,如检查运行时错误、理解编译警告信息,以及掌握常见编程陷阱,如数组越界、空指针引用等,都是改错题的重点。 4. **编程题**: 编程题是考试的核心部分,它测试考生的编程实践能力...

    校内历年试卷.rar

    此外,还可以参考教材和在线资源,学习C语言的经典例子和最佳实践,以及常见编程陷阱。同时,模拟真实的考试环境进行练习,比如限制解题时间,以适应考试的压力。通过反复练习和总结,学生可以逐步提高自己的C语言...

    VC的常用捷径-一个很不错的技术资料上边记录

    2. **代码编写**:高效的编码风格,包括命名规范、注释技巧以及避免常见编程陷阱。 3. **调试技巧**:使用Visual Studio调试器的高级功能,如断点、监视窗口、内存查看和调用堆栈分析。 4. **性能优化**:通过编译器...

    全国计算机等级二级C

    同时,熟悉考试环境和常见问题的解决方案,例如调试技巧和常见编程陷阱,也有助于提高考试成绩。 总之,全国计算机等级二级C考试是一项全面评估考生C语言编程能力的考试,考生需要系统学习C语言的基础知识,并通过...

    c#程序案例开发宝典(共21个章节)全

    这种错误示例在教学中非常有价值,因为它们能帮助读者理解并避免常见编程陷阱。 通过下载并解压这些rar文件,读者可以逐步学习和实践每一个案例,从而加深对C#的理解,并提升自己的编程技能。无论是初学者还是有...

    CodeList4.17

    这可能包括如何编写高效的算法、如何避免常见编程陷阱、如何优化内存使用等。通过"CodeList_04_17",我们可以学习到一些实用的编程技巧,提升我们的代码质量。 此外,文件中可能包含了各种代码示例,涵盖不同的功能...

Global site tag (gtag.js) - Google Analytics