【问题标题】:Making parent class private but make fields useable with 'extend' in subclass使父类私有,但使字段可与子类中的“扩展”一起使用
【发布时间】:2025-12-14 21:00:02
【问题描述】:

我的 Java 代码有一些问题。 我需要字段和父类是私有的,但它们必须在子类中可用。

我需要对类和字段修饰符运行 JUnite 测试。 运行时的错误代码: Error PS:我尝试让它们受到保护,但你可以更改字段。

可以使用一些建议。提前致谢

父类:

package logica;
import java.util.Objects;

public class Uitgave {
private String titel;
private double prijs;

private Uitgave(String titel, double prijs){
    this.titel = titel;
    this.prijs = prijs;
}

子类:

package logica;

import java.util.Objects;

public class Boek extends Uitgave{
private String auteur;
private int paginas;
public Boek(String titel,String auteur, double prijs, int paginas){
    super(titel,prijs);
    if(titel==null || auteur==null || prijs<0 || paginas<0){
        throw new IllegalArgumentException
("Controleer uw gegevens op fouten. 
Prijs en aantal paginas kan niet negatief zijn, 
het boek moet een titel en auteur hebben");
    }

    this.auteur = auteur;
    this.paginas = paginas;
}

【问题讨论】:

  • 您在构造函数中缺少右括号。
  • 在我看来,字段的可见性应该始终是私有的。如果您愿意,可以在父类中添加受保护的 getter 方法。我们仍然不知道问题是什么哈哈
  • 我将如何在子类中使用该方法?就像:父类:private void getTitel(){return title;子类:在构造函数中方法:this.titel=titel.getTitel();要不然是啥? :)
  • 我真的不明白你是怎么遇到这个问题的。您只需将 'private' 替换为 'protected'。而已。另外,不要像 Tin 所说的那样做,这会使你的代码变得非常混乱。
  • Joachim,解释一下你的程序有什么问题。我们都在黑暗中,试图猜测你的问题是什么。

标签: java


【解决方案1】:

你有两个选择。

  1. 将私有访问修饰符更改为至少受保护。但是如果你这样做,变量可以在包内部访问。不仅是子类 (In Java, difference between default, public, protected, and private)。

  2. 在父类中为私有变量定义get方法,在子类中使用super.getX()。

【讨论】: