java - Java 中的多态参数和字段

标签 java polymorphism field

预先感谢所有花时间回答的人。

好的,我已经有了这个类(class):

public class Class {
protected  Integer numero=1;


public Class(){}

public void method (){
System.out.println("Class do something");}


public String function(Class Object){
String res;

res=Object.numero.toString();;

return res;}

这个子类:

public class Subclass extends Class{
   protected Integer numero=2;

    @Override
    public void method(){
        System.out.println("Subclass do something");
    }
}

两者都有一个名为“numero”的整数字段,但具有不同的值。 Class 类有一个函数,它接受 Class 对象作为参数并返回“numero”值(1 表示类,2 表示子类)。另外,Class 有一个输出字符串“do some Class”的方法,我在子类中重写了该方法以输出“Subclass do some”。

在 main 方法中,我实例化了一个 Class 对象(“object”)和一个 Subclass 对象(“subobjeto”)。然后我为每个运行该方法,并获得适当的输出。

但是,当我尝试使用子类对象作为参数从类对象打印函数的值时(如果我对多态性的理解是正确的,这是允许的),它返回类字段“numero”的值(1),当我希望它返回“2”时。

public class Exe {


    public static void main(String[] args) {

        Class object= new Class();
        Subclass subobjeto=new Subclass();
        Class arreglo[]= new Class[2];

        arreglo[0]=object;
        arreglo[1]=subobjeto;

        for(int i=0;i<arreglo.length;i++){
        arreglo[i].method();
        }

        System.out.println(object.function(subobjeto)+" "+subobjeto.numero);

    }
}

输出:

run:
Class do something
Subclass do something
1 2
BUILD SUCCESSFUL (total time: 0 seconds)

我误解或做错了什么?

再次感谢您。

最佳答案

字段不进行多态处理;只有方法是。如果两个类具有相同名称的字段,即使一个类是另一个类的子类,这也是两个不同字段。

这里的教训主要是使用方法,并且两个具有相同名称的字段几乎总是一个坏主意 - 它只会导致困惑。

关于java - Java 中的多态参数和字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17683225/

相关文章:

java - 中位动态规划

java - 动态/编程设置具有可绘制背景的按钮的大小

java - 可以存储多种数据类型的变量

java - 有没有办法在 Java 中使用单个对象来运行继承的其他类的方法?

f# - 访问 DU 成员的命名字段

django - Django:来自自模型实例的字段的默认值

java - 如何使用 gson 迭代 json 数据

Java/C# Kerberos 互操作可能吗?

c++ - 在基类崩溃中调用虚函数

javascript - 日期选择器在字段中插入日期和星期