[英]Inheritance with two abstract classes
我试图创建一个包含每个类的至少两个实例的arraylist,我需要使用一个arraylist来实现。 问题是HourlyWorker和ContractWorker类都实现了抽象类Smarty,而Hobbit类实现了抽象类Simpleton,而我不知道如何在一个数组列表中同时使用它们。
public class MainClass {
private ArrayList<Smarty> list;
public MainClass() {
list = new ArrayList<Smarty>();
list.add(new HourlyWorker("Bob", 50, 40, 8.0));
list.add(new HourlyWorker("Bill", 70, 50, 12.0));
list.add(new ContractWorker("Jill", 80, 8, 100.0));
list.add(new ContractWorker("Amy", 125, 12, 85.0));
list.add(new Hobbit("Frodo", 12));
list.add(new Hobbit("Merry", 8));
}
不起作用的部分是
list.add(new Hobbit("Frodo", 12));
list.add(new Hobbit("Merry", 8));
同样,抽象类Smarty实现了Simpleton
我所有的课程
抽象类聪明
public abstract class Smarty extends Simpleton {
private int IQ;
public Smarty(){
}
public Smarty(String name, int IQ) {
setFirstName(name);
this.IQ = IQ;
}
public Smarty(int IQ){
this();
this.IQ = IQ;
}
public int getIQ(){
return IQ;
}
public void setIQ(int IQ){
this.IQ = IQ;
}
public abstract double getIncome();
}
抽象类Simpleton
public abstract class Simpleton {
private String name;
public Simpleton(){
}
public Simpleton(String name){
this.name = name;
}
public String getFirstName(){
return name;
}
public void setFirstName(String name){
this.name = name;
}
public abstract String getName();
public abstract String doMath();
public abstract String saySomethingSmart();
}
每小时工
public class HourlyWorker extends Smarty{
private int hoursWorked;
private double hourlyPay;
public HourlyWorker(String name,int IQ, int hoursWorked, double hourlyPay){
super(IQ);
setFirstName(name);
setHoursWorked(hoursWorked);
this.hourlyPay = hourlyPay;
}
public int getHoursWorked(){
return hoursWorked;
}
public void setHoursWorked(int hoursWorked){
this.hoursWorked = hoursWorked;
}
public double getHourlyPay(){
return hourlyPay;
}
public void setHourlyPay(double hourlyPay){
this.hourlyPay = hourlyPay;
}
public String multiply(int x, int y){
return x + " x " + y + " = " + x * y;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return getFirstName();
}
@Override
public String doMath() {
// TODO Auto-generated method stub
return "I can Multiply! " + multiply(2, 3);
}
@Override
public String saySomethingSmart() {
// TODO Auto-generated method stub
return "Hippos are dangerous!";
}
@Override
public double getIncome() {
// TODO Auto-generated method stub
double x = getHoursWorked();
double y = getHourlyPay();
double income = x * y;
return income;
}
}
ContractWorker类
public class ContractWorker extends Smarty{
private int contractsCompleted;
private double payPerContract;
public ContractWorker(String name,int IQ, int contractsCompleted, double payPerContract) {
// TODO Auto-generated constructor stub
super(IQ);
setFirstName(name);
this.contractsCompleted = contractsCompleted;
this.payPerContract = payPerContract;
}
public int getContractsCompleted(){
return contractsCompleted;
}
public void setContractsCompleted(int contractsCompleted){
this.contractsCompleted = contractsCompleted;
}
public double getPayPerContract(){
return payPerContract;
}
public void setPayPerContract(double payPerContract){
this.payPerContract = payPerContract;
}
public String division(int x, int y){
return x + " / " + y + " = " + x/y;
}
public double getIncome() {
// TODO Auto-generated method stub
double x = getContractsCompleted();
double y = getPayPerContract();
double income = x*y;
return income;
}
@Override
public String doMath() {
// TODO Auto-generated method stub
return ": I can do division! " + division(10,2);
}
@Override
public String saySomethingSmart() {
// TODO Auto-generated method stub
return ": The stars are aligned tonight.";
}
@Override
public String getName() {
// TODO Auto-generated method stub
return getFirstName();
}
}
霍比特人课
public class Hobbit extends Simpleton{
private int carrots;
public Hobbit(String name, int carrots){
super(name);
this.carrots = carrots;
}
public int getCarrotsPicked(){
return carrots;
}
public void setCarrotsPicked(int carrots){
this.carrots = carrots;
}
public String add(int x, int y){
return x + " + " + y + " = " + x+y;
}
@Override
public String getName() {
// TODO Auto-generated method stub
return getFirstName();
}
@Override
public String doMath() {
// TODO Auto-generated method stub
return "I can add! " + add(2,2);
}
@Override
public String saySomethingSmart() {
// TODO Auto-generated method stub
return "Leave me alone Sam!";
}
}
这是行不通的,因为Hobbit类没有实现抽象类Smarty。
您说:“ HourlyWorker和ContractWorker类都实现了抽象类Smarty,而霍比特人实现了抽象类Simpleton,而Smarty实现了Simpleton。
创建树时很容易看到问题:
Simpleton / \\ Smarty Hobbit / \\ HourlyWorker ContractWorker
如您所见,霍比特人没有实现抽象类Smarty。
因此,当您创建Smarty对象的ArrayList时,由于它不是Smarty,因此无法放入Hobbit对象。
而是使ArrayList包含Simpleton对象。 您的三个非抽象类都是Simpleton的子类,因此您可以将其放在Simpleton ArrayList中。
ArrayList<Simpleton> list = new ArrayList<Simpleton>();
然后,您的添加操作应该可以正常工作。
使您的列表包含Simpleton
类型的对象,因为这是您要存储在列表中的所有对象的共享父对象:
public MainClass() {
list = new ArrayList<Simpleton>();
list.add(new HourlyWorker("Bob", 50, 40, 8.0));
list.add(new HourlyWorker("Bill", 70, 50, 12.0));
list.add(new ContractWorker("Jill", 80, 8, 100.0));
list.add(new ContractWorker("Amy", 125, 12, 85.0));
list.add(new Hobbit("Frodo", 12));
list.add(new Hobbit("Merry", 8));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.