java类中的方法接收参数类型限制的问题
假设在A类中定义一个方法B,那么是否可以在B方法中设置接收A类以外的类型的参数呢?这个在java语法上是符合的吗?在线等答案,如果满意立即采纳!...
假设在A类中定义一个方法B,那么是否可以在B方法中设置接收A类以外的类型的参数呢?这个在java语法上是符合的吗?
在线等答案,如果满意立即采纳! 展开
在线等答案,如果满意立即采纳! 展开
4个回答
展开全部
//Apple Orange 都继承自Fruit类,同时Jonathan是Apple的子类
List<? extends Fruit> list = new ArrayList<Apple>();
//list.add(new Apple());Error
//list.add(new Fruit());Error
List<? super Fruit> list = new ArrayList<Apple>();
list.add(new Apple());//可以
list.add(new Fruit());//可以
List<? extends Fruit> list = new ArrayList<Apple>();
list中为什么不能加入Fruit类和Fruit类的子类呢,原因是这样的
List<? extends Fruit>表示上限是Fruit,下面这样的赋值都是合法的
List<? extends Fruit> list1 = new ArrayList<Fruit>();
List<? extends Fruit> list2 = new ArrayList<Apple>();
List<? extends Fruit> list3 = new ArrayList<Jonathan>();
如果List<? extends Fruit>支持add方法的方法合法的话
list1可以add Fruit和所有Fruit的子类
list2可以add Apple和所有Apple的子类
list3可以add Jonathan和所有Jonathan的子类
这样的话,问题就出现了
List<? extends Fruit>所应该持有的对象是Fruit的子类,而且具体是哪一个
子类还是个未知数,所以加入任何Fruit的子类都会有问题,因为如果add Apple
的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan>()
Apple的加入肯定是不行的,如果 如果add Jonathan
的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan的子类>()
Jonathan的加入又不合法,所以List<? extends Fruit> list 不能进行add
而List<? super Fruit> list 表示list持有的对象是Fruit的父类,下限是 Fruit,所以list中add Fruit或Fruit的子类是没有问题的
List<? extends Fruit> list = new ArrayList<Apple>();
//list.add(new Apple());Error
//list.add(new Fruit());Error
List<? super Fruit> list = new ArrayList<Apple>();
list.add(new Apple());//可以
list.add(new Fruit());//可以
List<? extends Fruit> list = new ArrayList<Apple>();
list中为什么不能加入Fruit类和Fruit类的子类呢,原因是这样的
List<? extends Fruit>表示上限是Fruit,下面这样的赋值都是合法的
List<? extends Fruit> list1 = new ArrayList<Fruit>();
List<? extends Fruit> list2 = new ArrayList<Apple>();
List<? extends Fruit> list3 = new ArrayList<Jonathan>();
如果List<? extends Fruit>支持add方法的方法合法的话
list1可以add Fruit和所有Fruit的子类
list2可以add Apple和所有Apple的子类
list3可以add Jonathan和所有Jonathan的子类
这样的话,问题就出现了
List<? extends Fruit>所应该持有的对象是Fruit的子类,而且具体是哪一个
子类还是个未知数,所以加入任何Fruit的子类都会有问题,因为如果add Apple
的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan>()
Apple的加入肯定是不行的,如果 如果add Jonathan
的话,可能List<? extends Fruit>持有的对象是new ArrayList<Jonathan的子类>()
Jonathan的加入又不合法,所以List<? extends Fruit> list 不能进行add
而List<? super Fruit> list 表示list持有的对象是Fruit的父类,下限是 Fruit,所以list中add Fruit或Fruit的子类是没有问题的
展开全部
可以。
例子:
public class Test {
public void b(User u){ //在Test类中定义了一个方法b,接收User类型的参数。User是在Test类之外定义的。
if(u!=null)
System.out.println(u.getName());
}
public static void main(String args[])
{
Test t = new Test();
User u = new User("aaa");
t.b(u);
}
}
class User{
String name;
public User(String name){
this.name = name;
}
public String getName(){
return name;
}
}
例子:
public class Test {
public void b(User u){ //在Test类中定义了一个方法b,接收User类型的参数。User是在Test类之外定义的。
if(u!=null)
System.out.println(u.getName());
}
public static void main(String args[])
{
Test t = new Test();
User u = new User("aaa");
t.b(u);
}
}
class User{
String name;
public User(String name){
this.name = name;
}
public String getName(){
return name;
}
}
追问
那为啥在泛型类中
public void addList(List list){
list.add(new D()); //编译通过
list.add(new A()); //编译错误
}
class A{}
class B extends A{}
class C extends A{}
class D extends B{}
class E extends C{}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先这个是可以的。
方法的参数列表是根据需要定义的,可以是基本类型,如:int,String等,也可以是对象类型,还可以是集合,如:List。都是可以的。
具体情况具体分析,不明白可以给我发信息。
方法的参数列表是根据需要定义的,可以是基本类型,如:int,String等,也可以是对象类型,还可以是集合,如:List。都是可以的。
具体情况具体分析,不明白可以给我发信息。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然可以了
class C
{
}
class A
{
public void B(C c)
{
}
public static void main(String[] args)
{
A a = new A();
C c = new C();
a.B(c);
}
}
上边这个例子 A类的B方法需要一个C类的实例当参数 这个完全能通过编译
class C
{
}
class A
{
public void B(C c)
{
}
public static void main(String[] args)
{
A a = new A();
C c = new C();
a.B(c);
}
}
上边这个例子 A类的B方法需要一个C类的实例当参数 这个完全能通过编译
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询