Java 如何从扩展回调抽象类

Java 如何从扩展回调抽象类,java,extends,Java,Extends,所以我必须创建一个类来扩展一个抽象类,并列出作业类型和正在使用的页面。然而,我不完全理解如何在正确使用createAssignment创建作业的同时返回阅读的页面和作业类型。这是我到目前为止所做的,但它似乎不起作用。感谢您的帮助 public abstract class Homework { public abstract int pagesRead(); public abstract String typeHomework(); public abstract vo

所以我必须创建一个类来扩展一个抽象类,并列出作业类型和正在使用的页面。然而,我不完全理解如何在正确使用createAssignment创建作业的同时返回阅读的页面和作业类型。这是我到目前为止所做的,但它似乎不起作用。感谢您的帮助

public abstract class Homework
{
    public abstract int pagesRead();
    public abstract String typeHomework();
    public abstract void createAssignment(int p);
}

public class MyMath extends Homework
{
    public abstract void createAssignment(int p, String t)
    {
       p = 5;
       t = "Math";
    }

}

您的代码已使用语法修复程序重新格式化:

public abstract class Homework
{
    public abstract int pagesRead();
    public abstract String typeHomework();
    public abstract void createAssignment(int p, String t);
}

public class MyMath extends Homework
{
    public void createAssignment(int p, String t)
    {
        p = 5;
        t = "Math";
    }
}
您还必须实现另外两个抽象方法

分配给方法的参数是没有意义的:-)我想你应该把它们分配给
MyMath
实例中的变量


我还没有测试过。这有帮助吗?

我编辑了两个程序,只将其中一个程序抽象化,但不起作用,因此它们都是抽象的,createAssignment现在无效。现在可以了。谢谢你们的格式化指针

public abstract class Homework
{
public abstract int pagesRead();
public abstract String typeHomework();
public abstract void createAssignment(int p);
}


}考虑到你的最后一个问题和这个问题,你显然不理解抽象的概念

定义
公共抽象void createAssignment(int p)时
在你的
作业
类中,你说“任何扩展这个类的具体类(读而不是抽象类)都应该实现这个方法”,但在具体类中,你又尝试使用
抽象
关键字实现相同的方法,只是使用了不同的签名,这是错误的

删除
摘要
关键字并更改签名:

  public void createAssignment(int p, String t) {
    p = 5;
    t = "Math";
  }
或实现抽象方法:

 @Override
  public void createAssignment(int p) {

  }

请记住,您必须实现在
作业
中定义的所有抽象方法,除非您也将
MyMath
抽象化。如果您只是重载它,则执行
createAssignment(int p)
“再次”将被计算在内。

这非常简单,伙计:

首先,您需要实现抽象方法:

public class MyMath extends Homework {
    public int pagesRead(){
       return 3; // any number that you want
    }

    public String typeHomework(){
       return "My math homework"; // any text for the homework
    }

    public void createAssignment(int p){
       // do anything with p 
    }
}
如我所见,我猜您正在尝试使用一种方法来填充字段值:

public class MyMath extends Homework {

   private int p;
   private String homeworkContent;

    public int pagesRead(){
       return p;
    }

    public String typeHomework(){
       return homeworkContent; // any text for the homework
    }

    public void createAssignment(int p, String homeworkContent){
      this.p = p;
      this.homeworkContent = homeworkContent;
   }
}
但是,请记住,您应该将方法从家庭作业改为:

public abstract void createAssignment(int p, String homeworkContent);

java是区分大小写的尝试在相同的情况下创建抽象类名首先应该从MyMath中的方法签名中删除
abstract
。此代码不编译,请查看
createAssignment
的方法签名。它也不会覆盖超类中的参数(2个参数)。另外:超类中的所有方法都是抽象的,所以你必须在子类中实现它们。请重新格式化你的代码:-)是的!事实上,我只是想出来了,并发布了我自己的答案,这与你发布时的答案非常相似。感谢您的帮助。
createAssignment
的签名不匹配。它只起作用,因为您还制作了
MyMath
摘要。您不会覆盖任何方法,甚至
createAssignment
public abstract void createAssignment(int p, String homeworkContent);