Java 覆盖私有方法

class Parent{
	private void f(){
		System.out.println("this is Parent");
	}
}

class Child extends Parent{ 
	public void f(){
		System.out.println("this is Child");
	}
}

public class Main{

	public static void main(String[] args) {
		Parent p = new Child();
		p.f();	
	}
}


本来我们可能期望输出“this is Child”,但是实际会输出“this is Parent”,由于private方法默认是final的,不允许被覆盖,所以无法动态绑定。

### Java 中 `private` 方法的定义、用法与访问限制 #### 定义 在 Java 中,`private` 是一种访问修饰符,用于限定类成员(变量或方法)的可见性和可访问范围。被声明为 `private` 的方法仅限于其所属的类内部使用,外部类或其他任何地方都无法直接调用该方法[^1]。 #### 使用场景 `private` 方法通常用于封装实现细节,防止其他类依赖这些具体实现逻辑。以下是常见的使用场景: - **辅助功能**:当某些操作只应在类内部执行时,可以将其设为 `private` 方法。这有助于保持代码模块化和清晰度。 - **隐藏复杂性**:如果某个算法或计算过程较为复杂且不需要暴露给外界,则可以通过 `private` 方法来隐藏其实现细节。 例如,在下面的代码中展示了如何利用 `private` 方法完成部分工作: ```java public class Calculator { public int add(int a, int b) { return calculate(a, b, "+"); } private int calculate(int a, int b, String operator) { switch (operator) { case "+": return a + b; default: throw new IllegalArgumentException("Unsupported operation."); } } } ``` 在此例子中,`calculate` 方法是一个私有的帮助函数,它不会被公开供客户端程序调用,而是由公共接口 (`add`) 调用来完成特定的任务。 #### 访问限制 对于标记为 `private` 的方法来说,它的作用域严格局限于定义它的那个类本身。这意味着即使子类也无法继承或者重父类中的 `private` 成员;然而值得注意的是,虽然无法覆盖此类成员,但可以在派生类别里重新创建同名的新成员而互不影响。 另外需要注意的一点是,尽管同一个包内的其它非嵌套类也不能直接存取另一个对象实例上的私人属性或行为,但如果两者之间存在某种形式的合作关系——比如工厂模式下的构建器设计模式下所体现出来的那样——那么仍然有可能间接达成目的。 #### 总结 综上所述,`private` 关键字提供了强有力的保护机制以确保数据的安全性和一致性,同时也促进了良好的软件工程实践如信息隐蔽原则的应用。合理运用它可以提高系统的稳定性和维护效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值