我有一个银行系统的不同类。这些类是;
现在我想创建一个ArrayList并用所有这些不同类的对象填充它,例如第一个元素是studentaccount1,第二个元素是,savingsaccount 2 ......等等。
所以我尝试使用对象类型:
List<Object> accountList = new ArrayList<>();
但是使用这种方法,由于某种原因,我无法访问存储在类变量中的值,例如:
accountList.add(saving1);
accountList.get(saving1)
没有提出在这些类中声明的方法。
那么我怎么能解决这个问题,或者以某种其他方式实现呢?
编辑:
我忘了提到普通帐户是父类,而StudentAccount
和SavingsAccount
都是子类。
因此,我意识到我可以将ArrayList声明为NormalAccount
类型(父类类型),并实现我想要的目标。
答案 0 :(得分:1)
使用常用方法创建一个接口Account
,并使所有这些帐户实现它。
public class SavingsAccount implements Account { ... }
然后创建一个实现此接口的类型列表。
List<Account> accountList = new ArrayList<>();
我不建议您仅为此目的创建标记接口。这是个坏主意。接口应该有公共方法。
或者,Account
可以是(抽象)类本身,这些特定帐户将从中扩展 - 包括避免代码双重性的常用功能。这取决于你想要达到的目标,以及哪一个适合你的设计。
编辑:
您错过了向我们披露一个非常重要的事实,NormalAccount
是其他人的父母。因此,解决方案非常简单:
List<NormalAccount> accountList = new ArrayList<>();
答案 1 :(得分:0)
您的课程后缀为DEVNAME=/dev/...YOURDISK sudo /lib/udev/hdparm
,所以我猜他们有相似的字段。
为他们创建一个超类,无论是接口还是类:
_Account
然后将您的列表声明为:
public class Account {
}
public class StudentAccount extends Account {
}
答案 2 :(得分:0)
您无法访问类的方法。相反,您只能在示例中访问//SHOW PRIMARY ADDRESS FROM DB set by user
// $myid is users id from DB
<?php
$primaryaddsql = "SELECT * FROM cust_address WHERE cust_ID = '$myid' AND primary_add = '1'";
$primaryadd = mysqli_query($conn,$primaryaddsql);
$mainaddress = mysqli_fetch_assoc($primaryadd)
echo'
<div class="mainAdd" >
<p class="thisadd">'.$mainaddress['address_1'].'</p>
<p class="thisadd">'.$mainaddress['address_2'].'</p>
<p class="thisadd">'.$mainaddress['city'].'</p>
<p class="thisadd">'.$mainaddress['country'].'</p>
<p class="thisadd">'.$mainaddress['post_code'].'</p>';
?>
//SHOW ALL ADDRESSES FROM DB FOR USER TO CHOOSE FROM
<?php
$myaddsql = "SELECT * FROM cust_address WHERE cust_ID = '$myid' AND primary_add != '1' ";
$myaddresults = mysqli_query($conn,$myaddsql);
while($myrow = mysqli_fetch_assoc($myaddresults)){
echo '
<div class="myleft" data-id="'.$myrow['address_ID'].'">
<p class="thisadd" >'.$myrow['address_1'].'</p>
<p class="thisadd">'.$myrow['address_2'].'</p>
<p class="thisadd">'.$myrow['city'].'</p>
<p class="thisadd">'.$myrow['country'].'</p>
<p class="thisadd">'.$myrow['post_code'].'</p>
</div>
';
}
?>
类的方法。
我认为你可以在接口或抽象类中放置常用的方法声明,然后实现它们。
我忘了提到普通帐户是父类,两者都是 &#34; StudentAccount&#34;和&#34; SavingsAccount&#34;是子类。
所以我可以将ArrayList声明为&#34; NormalAccount&#34;键入然后 能够访问变量吗?
是的,确切地说。您可以将其定义为,
Object
答案 3 :(得分:0)
使用Object类时,在检索数据期间,需要转换检索到的数据才能使用这些方法。尝试这样的事情:
(SavingsAccount)accountList.get(saving1)
您将能够访问方法