gpt4 book ai didi

java - 使用抽象/父类(super class)进行类的内部工作。访问修饰符的良好实践

转载 作者:行者123 更新时间:2023-12-01 23:17:10 25 4
gpt4 key购买 nike

如何更改我错误的 C# 式设计,以便在 Java 中使用合理的访问保护?

这是我的 super 类(class)

abstract class Parent {
protected parentVariable;

protected parentMethod() {
//These methods and variables contain internal workings of my sub-classes
//to avoid repetition
// I don't want classes elsewhere in the package (that don't inherit from class) to see these.
}
}

我有一些共享内部工作的子类,我将其放在父类(super class)中。它对其他类仍然是隐藏的,并且可由子类使用。等等,不:这不是 C#,这是 Java。

 Protected(c#) != Protected(java) ≈≈ Internal(C#).
c# protected = Access is limited to the containing class or types derived from the containing class.
java protected = Access is limited to the current package
Everything in the package can see access these. That's far too permissive for these internal workings.

如何解决这个问题?我是否必须将共享代码放到子类中并以代码重复为代价使用“私有(private)”?我对父类的使用一开始就是糟糕的设计吗?我是否必须将这些继承树存放在新包中?

最佳答案

没有访问修饰符允许子类可见,但不允许同一包的类可见。

但这并不是一个大问题,因为给定包中的类应该是“ friend ”、合作并同时发布。

即使他们看到一些不应该使用的字段和方法,包的其他类也不属于您无法控制的任何外部 API,并且外部代码无法访问 protected 方法。

因此,只需记录不应使用这些方法和字段,以便您或您的同事不会错误地使用它们。或者,如果您确实关心同包可见性,请将此类放入其自己的包中。

关于java - 使用抽象/父类(super class)进行类的内部工作。访问修饰符的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com