加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Polymorphism,ArrayList和Objects

发布时间:2020-12-15 04:28:28 所属栏目:Java 来源:网络整理
导读:这是一个普遍的问题.我试图在创建一个有效的程序或至少一个工作程序时理解多态的概念. 该程序将添加,删除,搜索和显示植物. 假设我必须创造一种超级植物和三种不同的植物(花,真菌,杂草)从植物延伸. 题: 我希望能够创建一个工厂ArrayList或Array. 那可能吗?
这是一个普遍的问题.我试图在创建一个有效的程序或至少一个工作程序时理解多态的概念.

该程序将添加,删除,搜索和显示植物.

假设我必须创造一种超级植物和三种不同的植物(花,真菌,杂草)从植物延伸.

题:
我希望能够创建一个工厂ArrayList或Array.
那可能吗?
或者最合乎逻辑的事情是什么?

上面的代码只是为了说明我的观点.没有任何正确的方法.

class Plant{
//atributes
//constructor
//setters and getters
}


class Flower extends Plant{
//with some different attributes
}


class Fungus extends Plant{
//with some different attributes
}

class Weed extends Plant{
// with some different attributes
}


public class PlantList{
public static void main(String[] args){

//HERE is where I'm confused

ArrayList<Plant> plantList= new ArrayList<Plant>(); 


// OR

Plant plantList= new Plant[25];

plantList[0] = new Flower();
plantList[1] = new weed();
plantList[2] = new fungus();

//or completely way off?

//add()
//remove ()
//search()
//display()

}

有人可以解释我如何将树不同类型的植物添加到Array或ArrayList中吗?

解决方法

默认情况下,您可以将任何Object放入List中,但是从Java 5开始,Java Generics可以限制可以插入List的对象类型.

List<Plant> list = new ArrayList<Plant>();

此List现在只能插入Plant实例.这是数组之间的多态性.

关于该主题的一个令人讨厌的方面是尽管Flower是Plant的子类型,但这并不意味着ArrayList< Flower>是ArrayList< Plant>的子类型.

你能做的是

List<Plant> list = new ArrayList<Plant>();

然后

Plant flower1 = new Flower();

Plant weed1 = new Weed();

list.add(flower1);
list.add(weed1);

泛型的要点是添加编译时类型安全性,这样的答案为什么第二种方法不是类型安全.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读