java - 从继承类引用抽象类中声明的变量

标签 java c# oop inheritance

我目前正在阅读一本关于设计模式的书,该书是针对 Java 编写的,但想用 Java 和 C# 编写示例代码。现在我正在尝试在 C# 中实现策略模式,虽然我在网上找到了很多示例,但我当前的问题是我最想弄清楚的。

在 Java 示例中,我有一个抽象类,然后是一个扩展该抽象类的类。在抽象类中,我声明但不实例化接口(interface)的变量,然后在扩展类中实例化这些变量。

界面:

public interface MathStuff{
    public void add();
}

摘要:

public abstract class Math{
    MathStuff mathStuff;

    public Math(){}

    public void addStuff(){
        mathStuff.add();
    }
}

扩展类:

public class DoStuffWithMath extends Math{
    public DoStuffWithMath(){
        mathStuff = new RandomClass();
    }
}

现在我真的很想在 C# 中复制这个。 C# 代码本质上是相同的。我有一个接口(interface)、一个抽象类和一个我认为扩展抽象类的类。我对 C# 不太熟悉。那个类看起来像这样。

class DoStuffWithMath : Math{
    public DoStuffWithMath(){
        mathStuff = new RandomClass();
    }
}

C# 代码的问题是我试图说“mathStuff = new RandomClass()”。任何帮助或阅读 Material 将不胜感激。

最佳答案

显式添加 protected 可以解决该问题(覆盖默认的private 访问权限):

public abstract class Math{
    protected MathStuff mathStuff;

    public Math(){}

    public void addStuff(){
        mathStuff.add();
    }
}

请注意,根据您的需要,将 mathStuff 作为基类的构造函数传递或使用属性而不是字段将是更好的解决方案。

关于java - 从继承类引用抽象类中声明的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27832229/

相关文章:

Java Swing : Inner JFrame class closes main window on close

oop - 使用 BDD 时遵循开放/封闭原则有什么好处吗?

java - 无法使用 jackson 将具有内部对象的JSON解析为Java对象

java - instanceof 如何在接口(interface)上工作

c# - LINQ : Reading objects from database, 出现异常时遇到问题

c# - 如何用不同的 stub 调用替换已声明的 stub 调用?

c# - 从两个不同的文本框 ASP.NET C# 将两个数据插入同一列

c++ - 我的第一个 CPP 程序的问题 - 标题和源代码

java - NoClassDefFoundError,在我的主 jar 中使用它之前加载我创建的库时遇到问题

java - 如何从 CSV/Map 实例化 Scala 对象