gpt4 book ai didi

java - 为什么下面的两个程序给出了概念上不同的输出?

转载 作者:行者123 更新时间:2023-11-30 11:13:40 25 4
gpt4 key购买 nike

请运行以下两个程序的输出...

程序_1:

package p1;

class x {
public void methodA() {
System.out.println("Methos A of Class X");

}
}

class y extends x {
public void methodA() {
System.out.println("Method A of Class Y");
}
}

class Override1 {
public static void main(String[] args) {
x obj1 = new x();
x obj2 = new y();
y obj3 = new y();
/* y obj4 = new x(); */

obj1.methodA();
obj2.methodA();
obj3.methodA();
/* obj4.methodA(); */
}
}

程序_2:

class x {
int a[] = new int[2];

x() {
a[0] = 10;
a[1] = 20;
}

}

class y extends x {
int a[] = new int[10];

y() {
a[0] = 12000;
a[1] = 1000;
a[2] = 120;
}

}

class Override2 {
public static void main(String[] args) {
x obj1 = new x();
x obj2 = new y();
// y obj3 = new x();
y obj4 = new y();
System.out.println(obj1.a[1]);
System.out.println(obj2.a[1]);
System.out.println(obj4.a[1]);

}
}

我的具体问题是,在 Program_1 中,Y 类MethodA 是通过什么方式调用的?在 program_2 中,X 类'20' (a[1]) 是什么意思?

请澄清我关于创建对象的内存分配和引用分配的基本概念。

最佳答案

简短的回答是 Java 中没有数据多态性。

在第一个例子中,methodA 是在不同类中实现的相同方法。

在第二个示例中,两个 a 是完全独立的、不相关的数据成员(即使它们碰巧具有相同的名称和数据类型)。

第二个例子等价于:

class x {
int a_x[] = new int[2];
x() {
a_x[0] = 10; a_x[1] = 20;
}

}
class y extends x {
int a_y[] = new int[10];
y() {
a_y[0] = 12000; a_y[1] = 1000; a_y[2] = 120;
}
}

class Override2 {
public static void main(String[] args) {
x obj1 = new x();
x obj2 = new y();
y obj4 = new y();
System.out.println(obj1.a_x[1]);
System.out.println(obj2.a_x[1]);
System.out.println(obj4.a_y[1]);
}
}

关于java - 为什么下面的两个程序给出了概念上不同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26353797/

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