gpt4 book ai didi

java - 将实例转换为特定类型有什么意义?

转载 作者:行者123 更新时间:2023-11-30 07:26:52 27 4
gpt4 key购买 nike

我对将实例声明为特定类型的目的有点困惑。例如,

Integer intOb1 = new Integer(3);
Object intOb2 = new Integer(4);

我知道intOb1的类型是IntegerintOb2的类型是Object,但是什么将 intOb2 声明为 Object 是否允许这样做?在 Object 中使用方法?您不能将这些方法用作 Integer 吗?还是主要目的只是为了能够将 intOb2 视为对象?

如你所见,我很困惑。

最佳答案

这实际上不称为转换,这是多态性 的一个例子。这允许变量根据它们与其他类的继承关系采用不同的类型。

例如,假设您正在编写一个模拟动物园的程序。您将有一个名为 Zoo 的类和一个名为 Animal 的类。还有几个从 Animal 类扩展而来的类:LionZebraElephant

将所有这些对象放在一个列表中会非常有用,但因为它们属于不同类型,即:LionZebraElephant,您不能将它们存储在一个列表中,您必须为每种动物类型维护一个单独的列表。这就是多态性发挥作用的地方。

由于 LionZebraElephant 类都继承自 Animal 类,我们可以只需将它们存储在 Animal 类型的列表中。

代码示例:

public class Zoo
{
private List<Animal> animals;

public Zoo()
{
this.animals = new ArrayList<>();
}

//notice this method takes an Animal object as a parameter
public void add(Animal a)
{
this.animals.add(a);
}
}

public abstract class Animal
{
private String name;
private String type;

public Animal(String name, String type)
{
this.name = name;
this.type = type;
}

//all subclasses must implement this method
public abstract void speak();
}

public class Lion extends Animal
{
private String animalType = "Lion";

public Lion(String name)
{
super(name, animalType);
}

public void speak()
{
System.out.println("ROAR");
}
}

//....etc for the other two animals

public class TestZoo
{
public static void main(String[] args)
{
Zoo myZoo = new Zoo();
Lion l = new Lion("Larry");
Elephant e = new Elephant("Eli");
Zebra z = new Zebra("Zayne");

myZoo.add(l); //<-- note that here I don't pass Animal objects to the
myZoo.add(e); // add method but subclasses of Animal
myZoo.add(z);
}
}

希望这有帮助,即使是一个愚蠢的例子。

关于java - 将实例转换为特定类型有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10134829/

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