【问题标题】:Struggling to implement abstract data types努力实现抽象数据类型
【发布时间】:2014-03-08 19:23:35
【问题描述】:

我正在尝试为我的一个程序实现 ADT,但我很难正确实现它以确保正确使用而不会出错。这是我正在使用的一些示例代码:

//JavaApplication

package javaApplication;
import someADT.*;

public class JavaApplication {
    public JavaApplication () {
        abstractType a = new typeFor("Hello"); //Err1
    }

    public abstract class typeFor implements abstractType { //Err2
        public abstractType typeFor (String s) {
            //some code
        }
    }

    public static void main(String[] args) {
        JavaApplication j = new JavaApplication();
    }
}

下面是访问器方法的列表。

//abstractType implementation
package someADT;

public interface abstractType {
    public abstractType doSomethingA();
    public abstractType doSomethingB(abstractType a);
    public int doSomethingC(abstractType a);
}

我不完全确定如何实现应该很明显的抽象类型。我已经用错误评论了上面的一些行,它们是:

Err1 = is abstract and cannot be instantiated
Err2 = attempting to assign weaker access privileges

我对此很陌生,但我找不到有关如何正确执行此操作的可靠文档。我有演讲幻灯片,但我承认它们相当简单。我确实使用了提供的示例,只是交换了我自己的东西,但保留了一般语法,我得到了这些错误。

我的实现有什么问题?

【问题讨论】:

  • Java 命名约定怎么样?

标签: java abstract-data-type


【解决方案1】:

你在这里遗漏了一些东西:

  1. 不能在 Java 中实例化抽象类
  2. 非抽象类应实现它从超类/接口继承的所有抽象方法
  3. 构造函数不能有返回类型

【讨论】:

  • 您的数字 3) 与此问题无关。
  • 此方法无效:public abstractType typeFor (String s) { //some code } 如果方法与类同名,则它是构造函数,不能有返回类型
  • 这是一个有效的方法,可以正常编译。
  • 我错了。不推荐但正确且代码可以编译
【解决方案2】:

抽象类不能扩展接口。它只能实现它。无法实例化接口。它只能由其他类实现或由其他接口扩展。

【讨论】:

  • 抱歉,这是一个错误。我的意思是输入implements,而不是extends
【解决方案3】:

您可以通过执行以下操作来改进您的代码:

public class JavaApplication {

    public JavaApplication () {
        abstractType a = (new typeFor()).typeFor("HELLO"); //Err1

    }

    public class typeFor implements abstractType { //Err2
        public abstractType typeFor (String s) {
            return null;
        }

    @Override
    public abstractType doSomethingA() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public abstractType doSomethingB(abstractType a) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int doSomethingC(abstractType a) {
        // TODO Auto-generated method stub
        return 0;
    }
    }

    public static void main(String[] args) {
        JavaApplication j = new JavaApplication();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2021-02-02
    • 2015-05-24
    相关资源
    最近更新 更多