import java.util.*;
public class MainFile{
public static void main(String[] args){
ArrayList<TypeExpences> listOfTypes = new ArrayList<TypeExpences>();
Water waterExp = new Water(0, "fafasd", 10, "cubic meters", 2, 1);
listOfTypes.add(waterExp);
System.out.println((listOfTypes.get(0)).getFixed());
}
}
public class Water extends UseExpences{
int pricePer2;
public Water(int kod, String descr, int fixed, String unit, int
pricePer, int pricePer2){
super(kod, descr, fixed, unit, pricePer);
this.pricePer2 = pricePer2;
}
public int getFixed(){
return super.getFixedPrice(fixedPrice);
}
}
public class UseExpences extends TypeExpences{
protected int fixedPrice;
protected String unitOfMeasurement;
protected int pricePerMeasurementUnit;
public UseExpences(int kod, String descr, int fixed, String unit, int
pricePer){
super(kod, descr);
fixedPrice = fixed;
unitOfMeasurement = unit;
pricePerMeasurementUnit = pricePer;
}
public int getFixedPrice(int fixedPrice){
return fixedPrice;
}
}
public class TypeExpences {
protected int code;
protected String description;
public TypeExpences(int kod, String descr){
code = kod;
description = descr;
}
protected int getCode(int code){
return code;
}
protected String getDescription(String description){
return description;
}
}
错误:
C:\Users\laptopara\Desktop\ask>javac MainFile.java
MainFile.java:39: error: cannot find symbol
System.out.println((listOfTypes.get(0)).getFixed());
^
symbol: method getFixed()
location: class TypeExpences
1 error
如果我做System.out.println(waterExp.getFixed());它有效。
如何使用System.out.println((listOfTypes.get(0))。getFixed());?
答案 0 :(得分:1)
啊,我认为你的问题是,你使用多态编程......
您有一个对象ArrayList<TypeExpences> listOfTypes
,一个ArrayList
存储类TypeExpences
的对象。多亏了多态编程,它还可以存储TypeExpences
子类的对象,如Water
。
您现在的问题是,您无法使用子类Water
中声明的方法!您只能使用已在基类TypeExpences
中声明的方法,我想方法public int getFixed()
尚未声明。
将您的代码更改为此...
ArrayList <Water> listOfTypes = new ArrayList<Water>();
...解决这个问题。或者,您可以在基类public int getFixed()
中实现方法TypeExpences
并在子类中覆盖它。
也许还要看一下这个tutorial或类似的东西......
修改强>
您可以使用这样的界面
public interface AllMyObjects
{
public abstract int getFixed();
}
现在在您使用的每个类中实现此接口,如下所示:
public class Water implements AllMyObjects
{
...
@Override public int getFixed()
{
return super.getFixedPrice(fixedPrice);
}
}
...
public class Phone implements AllMyObjects
{
@Override public int getFixed()
{
...
}
}
在此更改后,您的数组列表如下:
ArrayList <AllMyObjects> listOfTypes = new ArrayList<>();
现在它应该可以工作,写评论......