`

陷阱:“覆盖” 私有方法

F# 
阅读更多
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()方法。

分享到:
评论

相关推荐

    Java Scjp 陷阱大全.doc

    7. **Math类的特性**:`Math`类是不可变的,它的所有方法都是静态和final的,这意味着它的状态不能改变,且其方法不能被覆盖。 8. **instanceOf操作符**:`instanceOf`是关键字,用于检查对象是否属于特定类或其...

    java 多态 经典讲解

    #### 三、多态机理:方法绑定(method binding) 多态的核心在于方法绑定,具体分为**静态绑定**和**动态绑定**。静态绑定发生在编译时,如构造函数调用和非虚方法调用。动态绑定则发生在运行时,当调用虚方法时,JVM...

    SCJP考题中的陷阱

    4. **没有run方法的线程初始化**:创建线程时,要么实现Runnable接口并提供run方法,要么继承Thread类并覆盖run方法。 5. **局部内部类访问非final变量**:局部内部类只能访问外部类的所有成员,以及其封闭范围内的...

    Java陷阱一箩筐

    - Override是重写,子类方法覆盖父类方法,要求方法名、返回类型和参数列表完全一致。 以上只是一部分Java面试中的常见问题,还有更多如异常处理、多线程、集合框架、接口与抽象类、反射、I/O流等方面的知识需要...

    V20-Java笔记整理-重要概念和常见陷阱梳理.docx

    - **重写(覆盖)**:子类覆盖父类的方法。 - **重载**:在同一类中定义多个同名方法,但参数列表不同。 - **构造器重载**:在同一个类中定义多个构造器,每个构造器的参数列表不同。 **5.5 多态** - 多态性允许...

    Java面试中的陷阱

    继承表示一个类是另一个类的类型,子类继承父类的所有非私有成员(方法和属性)。实现接口表示一个类实现了接口中定义的所有抽象方法。接口可以提供一种标准的方式让不同的类来实现相同的行为,提高代码的灵活性和可...

    SCJP 陷阱大全

    当一个类继承自`Thread`类时,必须覆盖`run()`方法。这是线程执行体所在,如果不覆盖,则会执行默认的空实现,这通常不符合设计意图,因此是SCJP考试中常见的考点。 ### 五、局部内部类访问局部变量的限制 局部...

    Google Objective-C Style Guide 中文版

    5. 访问控制:@public和@private关键字用于声明类成员的访问级别,即公开还是私有,影响类的封装性。 6. 异常处理:Objective-C中的异常处理方式,以及如何在代码中合理地使用异常机制。 7. 协议的使用:协议定义...

    winform 构造方法中调用虚方法源码

    为了确保在对象完全初始化后再调用虚方法,可以将初始化操作推迟到非构造函数的其他合适位置,如`OnLoad`事件处理程序,或者使用一个非虚的私有初始化方法,只在派生类中调用。 总的来说,理解和处理在构造方法中...

    scjp考题中的种种陷阱

    这意味着`main()`方法不能被覆盖,这对于防止子类修改程序入口点的行为是有帮助的。 #### 十四、`-0.0 == 0.0`的结果为真 在Java中,`-0.0`和`0.0`虽然符号不同,但在数值上被认为是相等的。因此,表达式`-0.0 == ...

    java面试题2

    6. **最终方法**:final关键字用于声明不可改变的方法,即该方法不能在子类中被覆盖,选项C正确。 7. **主方法声明**:Java应用程序的入口点是main方法,其方法头应为“public static void main(String[] args)”,...

    Java Scjp

    3. **构造器与同名方法**:方法名称可以与类名或构造器相同,但构造器没有返回值且不能被继承。 4. **线程启动**:如果类不继承Thread或者实现Runnable接口并重写run()方法,那么创建的线程将无法执行。 5. **局部...

    Java考试认证真题集锦

    然后,`System.out.println(f.a)` 将打印 `f` 的 `a` 值,但这里有一个陷阱:`f` 是 `Foo` 类型的引用,即使它指向的是 `Bar` 对象,它不能访问 `Bar` 类中覆盖的 `a`。因此,`f.a` 仍然会访问 `Foo` 类的 `a`,输出...

    effectice_java第二版 英文

    clone()方法可能存在复杂性和陷阱,除非有必要,否则应避免覆盖。 10. **条目10:优先考虑使用枚举而非int常量(Use Enums Instead of Int Constants)** 枚举提供了类型安全,可以方便地添加方法和实现接口,比...

    Java An Introduction to Problem Solving and Programming

    ### 第五章:方法与对象编程基础 - **方法编写与调用**(第292页):教授如何定义和调用方法,包括参数传递、返回值设定等,以及如何使用方法封装功能模块。 - **公有与私有访问控制**(第300页):介绍Java中的...

    C++虚函数的陷阱

    在给出的代码中,类`B`有一个公共的虚函数`fun`,而类`D`继承自`B`并覆盖了这个虚函数,但将其声明为私有的。按照C++的访问控制规则,私有成员函数只能在类的内部被访问。然而,当使用基类指针`B*`指向派生类`D`的...

    java易犯错误.pdf

    #### 一、何时被覆盖的方法实际上并未被真正覆盖 Java是一种面向对象的编程语言,其三大核心概念分别是封装、继承和多态。在这三个概念中,多态尤为关键,而多态的一个重要体现就是方法的覆盖(也称为方法的重写)...

    Secrets of the JavaScript Ninja (Manning MEAP 2009).pdf 电子书

    - **临时作用域与私有变量**:提供了一种创建临时作用域的方法,并且可以在其中定义私有变量。 - **循环中的闭包**:解决了循环中使用闭包时常见的问题。 - **库包装**:讲解了如何使用闭包来封装第三方库的API。 #...

    JavaScript权威指南第6版

    - **封装与多态**:讨论了如何通过私有属性和方法实现封装,以及多态性在JavaScript中的实现方式。 - **错误处理**: - **异常捕获**:讲解了try-catch-finally语句的使用方法。 - **自定义异常**:介绍了如何抛...

Global site tag (gtag.js) - Google Analytics