-1

我正在学习 Java 入门课程,并且正在学习继承。我必须在已经编写的超类代码中创建一个新方法(getUserName)以使私有用户名变量公开,并且它可以编译并且运行良好:

import java.util.ArrayList;

public class Post 

    private String username;  // username of the post's author
    private long timestamp;
    private int likes;
    private ArrayList<String> comments;

    /**
     * Constructor for objects of class Post.
     * 
     * @param author    The username of the author of this post.
     */
    public Post(String author)
    {
        username = author;
        timestamp = System.currentTimeMillis();
        likes = 0;
        comments = new ArrayList<String>();
    }

    /**
     * Record one more 'Like' indication from a user.
     */
    public void like()
    {
        likes++;
    }

    /**
     * Record that a user has withdrawn his/her 'Like' vote.
     */
    public void unlike()
    {
        if (likes > 0) {
            likes--;
        }
    }

    /**
     * Add a comment to this post.
     * 
     * @param text  The new comment to add.
     */
    public void addComment(String text)
    {
        comments.add(text);
    }

    /**
     * Return the time of creation of this post.
     * 
     * @return The post's creation time, as a system time value.
     */
    public long getTimeStamp()
    {
        return timestamp;
    }

    /**
     * Display the details of this post.
     * 
     * (Currently: Print to the text terminal. This is simulating display 
     * in a web browser for now.)
     */
    public void display()
    {
        System.out.println(username);
        System.out.print(timeString(timestamp));

        if(likes > 0) {
            System.out.println("  -  " + likes + " people like this.");
        }
        else {
            System.out.println();
        }

        if(comments.isEmpty()) {
            System.out.println("   No comments.");
        }
        else {
            System.out.println("   " + comments.size() + " comment(s). Click here to view.");
        }
    }
    public String getUserName()
    {
        return username;
    }

    /**
     * Create a string describing a time point in the past in terms 
     * relative to current time, such as "30 seconds ago" or "7 minutes ago".
     * Currently, only seconds and minutes are used for the string.
     * 
     * @param time  The time value to convert (in system milliseconds)
     * @return      A relative time string for the given time
     */

    private String timeString(long time)
    {
        long current = System.currentTimeMillis();
        long pastMillis = current - time;      // time passed in milliseconds
        long seconds = pastMillis/1000;
        long minutes = seconds/60;
        if(minutes > 0) {
            return minutes + " minutes ago";
        }
        else {
            return seconds + " seconds ago";
        }
    }
}

但是当我尝试在子类中调用这个方法(在 printShortSummary 方法中)时,它不会编译:

`enter code here`import java.util.ArrayList;
`enter code here`public class MessagePost extends Post
{
    private String message;  // an arbitrarily long, multi-line message

    /**
     * Constructor for objects of class MessagePost.
     * 
     * @param author    The username of the author of this post.
     * @param text      The text of this post.
     */
    public MessagePost(String author, String text)
    {
        super(author);
        message = text;
    }
    public String printShortSummary;
    {
        System.out.println("Message post from " + getUserName);

    }
    /**
     * Return the text of this post.
     * 
     * @return The post's message text.
     */
    public String getText()
    {
        return message;
    }
}
4

4 回答 4

2

改变

public String printShortSummary;
{
    System.out.println("Message post from " + getUserName);

}

public String printShortSummary()
{
    String username;
    System.out.println("Message post from " + getUserName());
    username = getUsername();
    return username;
}

规则

您的方法 printShortSummary() 必须返回一个字符串值。当你调用一个方法时,不要忘记括号 ()。最终,您的错误大多是拼写错误,我建议您使用像 Netbeans 或 Eclipse 这样的 IDE,以便可以轻松纠正错误。

于 2013-03-21T03:52:49.100 回答
2

System.out.println("Message post from " + getUserName);

应该

System.out.println("Message post from " + getUserName());.

getUserName()是一种方法,即使它没有参数,也需要在其末尾加上括号。

于 2013-03-21T03:47:48.307 回答
1

调用方法如下(带括号):

System.out.println("Message post from " + getUserName());

此外,您必须使printShortSummary方法无效或返回一些字符串。

于 2013-03-21T03:46:40.637 回答
1

你应该把它称为方法人,这样称呼它

System.out.println("Message post from " + getUserName());
于 2013-03-21T03:47:32.763 回答