现在正在完成任务,可以帮助理解一个让我不知所措的概念。
特别是,我必须创建一个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;错误。我想有一些我无法找到的基本概念。我把所有的类都声明为静态,这让我可以编译,但是我读过的东西让我觉得这不是正确的方法。
答案 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)
您的balance
变量将被创建并立即销毁,因为其范围仅限于构造函数。要解决此问题,请将balance
移到构造函数之外。现在它会活得更久,你可以访问和更改它。
private class Account {
//declare balance outside of the constructor
int balance;
Account() {
//initialize balance to zero inside the constructor
balance = 0;
}
}