Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多态性行为_Java_Class_Polymorphism - Fatal编程技术网

Java多态性行为

Java多态性行为,java,class,polymorphism,Java,Class,Polymorphism,若我有一个基类调用a,那个么两个子类扩展了一个叫做B,C的基类 B和C都有一些扩展变量..等等 当我要求用户输入B或C时,我可以使用一个arraylist来保存这两个。所以当我需要打印出来的时候,找到它。我不需要通过数组列表B和数组列表C? 谢谢你的帮助 多态性允许您在任何需要超类型的地方使用子类型。每个子类型都是它的超类型,所以您只需创建一个超类型列表,就可以传入所有内容 List<A> myList = new ArrayList<A>(); myList.add(

若我有一个基类调用a,那个么两个子类扩展了一个叫做B,C的基类 B和C都有一些扩展变量..等等 当我要求用户输入B或C时,我可以使用一个arraylist来保存这两个。所以当我需要打印出来的时候,找到它。我不需要通过数组列表B和数组列表C?
谢谢你的帮助

多态性允许您在任何需要超类型的地方使用子类型。每个子类型都是它的超类型,所以您只需创建一个超类型列表,就可以传入所有内容

List<A> myList = new ArrayList<A>(); 
myList.add(new B());
myList.add(new C());
List myList=new ArrayList();
添加(新的B());
添加(新的C());

同样值得注意的是:除了Java中的数组之外,列表是不可协变的,因此不能将
列表
放在需要
列表
的位置。这是一件好事,因为否则您可以在
B
列表中输入
C
的实例,这将引发异常

多态性允许您在任何需要超类型的地方使用子类型。每个子类型都是它的超类型,所以您只需创建一个超类型列表,就可以传入所有内容

List<A> myList = new ArrayList<A>(); 
myList.add(new B());
myList.add(new C());
List myList=new ArrayList();
添加(新的B());
添加(新的C());

同样值得注意的是:除了Java中的数组之外,列表是不可协变的,因此不能将
列表
放在需要
列表
的位置。这是一件好事,因为否则您可以在
B
列表中输入
C
的实例,这将引发异常

声明类型为A的arraylist。
B和C将放入列表。

声明类型为A的arraylist。
B和C将适合该列表。

您需要做的是创建一个类型为您的超类的Arraylist

public class A
{
...
}
public class B extends A
{
....
}

public class C extends A
{
}
在toString方法之外的B类和C类上 无论何时您想要打印arraylist(其中是否包含B或C) 你就这样做吧:

List<A> myArray = new ArrayList<A>(); 
// Fill it with B and C objects

// Iterate through the ArrayList
for(A item : myArray)
     System.out.println(item.toString());
List myArray=new ArrayList();
//用B和C对象填充它
//遍历ArrayList
用于(项目:myArray)
System.out.println(item.toString());

您需要做的是创建一个类型为的Arraylist,它是您的超类

public class A
{
...
}
public class B extends A
{
....
}

public class C extends A
{
}
在toString方法之外的B类和C类上 无论何时您想要打印arraylist(其中是否包含B或C) 你就这样做吧:

List<A> myArray = new ArrayList<A>(); 
// Fill it with B and C objects

// Iterate through the ArrayList
for(A item : myArray)
     System.out.println(item.toString());
List myArray=new ArrayList();
//用B和C对象填充它
//遍历ArrayList
用于(项目:myArray)
System.out.println(item.toString());

使用
ArrayList
。使用
ArrayList
。我会说更少的“意思”,更多的“允许你”。感谢你的评论。我去掉了“means”。谢谢你,库鲁,但是在这个例子中,我仍然可以从Arraylist A中拆分B和C,并且只在B或C中获取特定变量吗?你仍然可以通过使用
instanceof
检查过滤对象,将
列表
分为
列表和
列表
。创建两个新列表,一个是泛型
B
,一个是泛型
C
,然后迭代你的
列表
,根据你的
实例将每个元素添加到这两个列表中的任何一个-检查。我会说少一些“意思”,多一些“允许你”。感谢你的评论。我去掉了“means”。谢谢你,库鲁,但是在这个例子中,我仍然可以从Arraylist A中拆分B和C,并且只在B或C中获取特定变量吗?你仍然可以通过使用
instanceof
检查过滤对象,将
列表
分为
列表和
列表
。创建两个新列表,一个为泛型
B
,一个为泛型
C
,然后迭代您的
列表
,并根据您的
实例将每个元素添加到两个列表中的任何一个。请检查,但是在这种情况下,我仍然可以从Arraylist A中拆分B和C,只在B或C中获取特定变量吗?谢谢你,福顿,但是在这种情况下,我仍然可以从Arraylist A中拆分B和C,只在B或C中获取特定变量吗?