在ArrayList中存储对象时出错

时间:2015-11-24 23:19:23

标签: java arraylist

现在正在完成任务,可以帮助理解一个让我不知所措的概念。

特别是,我必须创建一个ArrayList来保存两个Account对象,然后使用该列表来收集输入。不幸的是,当我尝试将这些对象存储到ArrayList中时,其中一个给我带来了问题。

mask = imread('mask.png');
foreground = imread('fg.jpg');
background = imread('bg.jpg');
[r,c,~]=size(mask);
A = zeros(size(mask));

for i=1:r    
  for j=1:c        
    if mask(i,j) == 0
        A(i,j,:) = background(i,j,:);
    end
    if mask(i,j) > 0
        A(i,j,:) = foreground(i,j,:);
    end       
  end
end

imshow(A);

实例化新的import java.util.ArrayList; public class InheritanceTest { private class Account { //Constructor Account() { // Initialize balance int balance = 0; } } private class CheckingAccount extends Account { } private class SavingsAccount extends Account { } public static void main(String[] args) { ArrayList<Account> Bank = new ArrayList<Account>(); CheckingAccount checking1 = new CheckingAccount(); Bank.add(checking1); SavingsAccount savings = new SavingsAccount(); Bank.add(savings); } } 对象的命令工作正常,但是一旦我将帐户插入CheckingAccount,新的Bank.add()对象就会抛出&#34;没有封装的继承测试类型的实例可以访问。必须使用InheritanceTest类型的封闭实例限定分配(例如x.new A(),其中x是InheritanceTest的实例)。&#34;错误。我想有一些我无法找到的基本概念。我把所有的类都声明为静态,这让我可以编译,但是我读过的东西让我觉得这不是正确的方法。

2 个答案:

答案 0 :(得分:1)

您的问题有三种可能的解决方案。

首先,您可以创建内部类static ...

public class InheritanceTest {

    private static class Account {

        //Constructor
        Account() {
            // Initialize balance
            int balance = 0;
        }
    }

    private static class CheckingAccount extends Account {
    }

    private static class SavingsAccount extends Account {
    }

    public static void main(String[] args) {
        ArrayList<Account> Bank = new ArrayList<Account>();
        CheckingAccount checking1 = new CheckingAccount();
        Bank.add(checking1);
        SavingsAccount savings = new SavingsAccount();
        Bank.add(savings);
    }
}

或者您需要创建InheritanceTest的实例并使用它来创建内部类

import java.util.ArrayList;

public class InheritanceTest {

    private class Account {

        //Constructor
        Account() {
            // Initialize balance
            int balance = 0;
        }
    }

    private class CheckingAccount extends Account {
    }

    private class SavingsAccount extends Account {
    }

    public static void main(String[] args) {
        InheritanceTest test = new InheritanceTest();
        ArrayList<Account> Bank = new ArrayList<Account>();
        CheckingAccount checking1 = test.new CheckingAccount();
        Bank.add(checking1);
        SavingsAccount savings = test.new SavingsAccount();
        Bank.add(savings);
    }
}

或将每个类分成它自己的类文件

这基本上是因为没有外部类的实例

而无法创建非静态内部类

答案 1 :(得分:0)

MadProgrammer已经解决了真正的问题,只想添加一件事。您可能想要研究变量范围&#39;。

您的balance变量将被创建并立即销毁,因为其范围仅限于构造函数。要解决此问题,请将balance移到构造函数之外。现在它会活得更久,你可以访问和更改它。

private class Account {
    //declare balance outside of the constructor 
    int balance;
    Account() {
        //initialize balance to zero inside the constructor
        balance = 0;
    }
}