【问题标题】:Override print method in Java覆盖Java中的打印方法
【发布时间】:2017-05-12 03:19:39
【问题描述】:

我有一个(语法?)关于重写的 toString 方法和数组列表的 get 方法的问题。

我的第一个名为 BAccount 的类创建了一个包含姓名、余额和帐号的对象。

public class BAccount { 
private static int lastAssignedNumber=1000;
String uName;
double uBalance;
private int accountNumber;
public BAccount(String name, double balance) {
    uName=name;
    lastAssignedNumber++;
    uBalance=balance;
    accountNumber=lastAssignedNumber;
}

public void setName(String inputName) { 
    uName=inputName;
}

public void setBalance(double inputBalance) {
    uBalance=inputBalance;
}

public String getName() {
    return uName;
}

public double getBalance() {
    return uBalance;
}

public int getAccountNumber() {
    return accountNumber;
}

public String toString() { 
    return ("Account Holder Name: " + this.getName() +
            ", Acccount Balance: " + this.getBalance() +
            ", Account Number: " + this.getAccountNumber());
}

我的测试程序类创建了 3 个帐户,将它们添加到 ArrayList 并使用 get 方法打印每个帐户。

import java.util.*;
public class Test { 
public static void main(String[] args) { 
    Scanner in=new Scanner(System.in);
    ArrayList<BAccount> accountArray=new ArrayList<>();
    for(int i=0; i<3; i++) { 
    System.out.print("Enter Account Holder Name: ");
    String name=in.nextLine();
    System.out.print("Enter Account Balance: ");
    double balance=in.nextDouble();
    in.nextLine();
    BAccount account= new BAccount(name, balance);
    accountArray.add(account);
    }
    System.out.println(accountArray.get(0));
    System.out.println(accountArray.get(1));
    System.out.println(accountArray.get(2));
}

}

测试程序类创建 3 个帐户,将它们添加到 ArrayList 并使用 get 方法打印每个帐户。

我的问题是:ArrayList 的 get 方法如何知道使用我的覆盖 toString 方法的格式进行打印?

【问题讨论】:

  • PrintStream.println(Object); 调用 Object.toString() - 您已覆盖。
  • ... 正如 javadoc 清楚解释的那样。

标签: java arraylist methods overriding


【解决方案1】:

ArrayList.get() 对此一无所知!

此方法只是返回对存储在给定 get() 的索引处的对象的引用。

最终调用该对象上的 toString() 的是 println()。在 Java 中,要调用的方法的确切版本是从对象的确切类型派生的——在运行时动态地派生。这就是所谓的多态性,它只是面向对象编程的基石。

该对象是您的类的一个实例,它已覆盖 toString()... 导致所需的和完全预期的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多