gpt4 book ai didi

java - 为什么我不能在 arraylist 中使用 getFixed 方法?我怎样才能让它发挥作用?

转载 作者:行者123 更新时间:2023-11-30 06:12:08 24 4
gpt4 key购买 nike

 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()); 一起使用?

最佳答案

啊是的,我认为你的问题是,你使用多态编程......你有一个对象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();
}

现在在您使用的每个类中实现此接口(interface),如下所示:

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<>();

现在应该可以了,如果不行,请写评论...

关于java - 为什么我不能在 arraylist 中使用 getFixed 方法?我怎样才能让它发挥作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com