java类中的方法接收参数类型限制的问题

假设在A类中定义一个方法B,那么是否可以在B方法中设置接收A类以外的类型的参数呢?这个在java语法上是符合的吗?在线等答案,如果满意立即采纳!... 假设在A类中定义一个方法B,那么是否可以在B方法中设置接收A类以外的类型的参数呢?这个在java语法上是符合的吗?
在线等答案,如果满意立即采纳!
展开
 我来答
kejiaweiren
推荐于2018-04-11 · TA获得超过6740个赞
知道大有可为答主
回答量:1774
采纳率:0%
帮助的人:3349万
展开全部
//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的子类是没有问题的
召秋梵悌p1
2012-06-22 · TA获得超过2282个赞
知道小有建树答主
回答量:616
采纳率:80%
帮助的人:684万
展开全部
可以。

例子:
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{}

}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fa82f1dd6
2012-06-22 · 超过29用户采纳过TA的回答
知道答主
回答量:155
采纳率:0%
帮助的人:75.9万
展开全部
首先这个是可以的。
方法的参数列表是根据需要定义的,可以是基本类型,如:int,String等,也可以是对象类型,还可以是集合,如:List。都是可以的。
具体情况具体分析,不明白可以给我发信息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没有响应m2
2012-06-22 · TA获得超过8387个赞
知道大有可为答主
回答量:7579
采纳率:33%
帮助的人:3497万
展开全部
当然可以了
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类的实例当参数 这个完全能通过编译
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式