gpt4 book ai didi

java - 朴素的继承问题 - Java

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:25 24 4
gpt4 key购买 nike

大家好,

问这么幼稚的问题让我感到尴尬。但是我不能理解一件事,我有这样的继承结构,

enter image description here

B extends A,我写的代码如下,

A 级

public class A{
private int pos = 0;
public A(){
this.pos = 12;
}
public int getPos(){
return this.pos;
}
}

B 级

public class B extends A{
int spec = 15;
public B(){
super();
}
public int getSpec(){
return this.spec;
}
}

我还有一门课要测试,这会让我们回答我的问题。

类测试

import java.util.*;
public class Test{
public static void main(String[] args){
B a = new B();
ArrayList<A> c = new ArrayList<A>();
c.add(a);
System.out.println(c.get(0).getPos());
System.out.println(c.get(0).getSpec());
}
}

问题:现在我正在创建 B 的实例,这意味着我可以访问父类的方法 getPos() 和 B 自己的方法 getSpec()。但是如果我创建类型为 A 的 ArrayList(...B 也是类型 A,因为它扩展了 A...)并添加了我的 B 的实例,它就失去了访问它自己的方法的能力。我究竟做错了什么? ArrayList 实现是否在内部将我的 B 转换为 A?


Note : My basic understanding of inheritance is parent cannot access child's method except they are protected. But Child can access their parent class's method.

最佳答案

不涉及转换。你所做的与此没有什么不同:

A bAsA = new B():

虽然 bAsA 引用的对象确实是一个 B 对象,但它由一个 A 变量保存,因此只有 A 方法可用(除非您明确地将其转换为 B 变量)。

由于您的 ArrayList 是 A 的 ArrayList,因此 ArrayList 中的每个项目都被视为一个 A 变量,并且只有 A 方法可用。

关于java - 朴素的继承问题 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369236/

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