Java通用问号与继承

Java通用问号与继承,java,generics,Java,Generics,四种方法: public Class<?> Func(Class<?> cls) //1 public Class<?> Func(Class cls) //2 public Class Func(Class<?> cls) //3 public Class Func(Class cls) //4 公共类Func(类cls)//1 公共类Func(类cls)//2 公共类Func(类cls)//3 公共类Func(类cls)//4 我发

四种方法:

public Class<?> Func(Class<?> cls)  //1
public Class<?> Func(Class cls)  //2
public Class Func(Class<?> cls)  //3
public Class Func(Class cls)  //4
公共类Func(类cls)//1
公共类Func(类cls)//2
公共类Func(类cls)//3
公共类Func(类cls)//4
我发现:

1) 4可以覆盖3
2) 3无法覆盖4。
3) 但是2和4可以相互覆盖

为什么?

这可能与类型转换无关,因为类和类可以相互转换。这是关于为什么编译器阻止(2)但允许(1)和(3)的更多信息。

原因-
1-
Class
是指任何类型的
Class
对象,即
Class


2-具有
参数的函数不能编辑
类型的对象,但具有
参数的函数可以编辑对象。

例如-

// function 1
void m(List<?> list){
    list.add(3);
}
// function 2
void m(List<?> list){
    list.get(0);
}
//函数1
无效m(列表){
增加(3);
}
//职能2
无效m(列表){
list.get(0);
}
函数1不会编译,因为它有一个参数
List
,这意味着任何列表都可以作为参数发送,但它无法编辑,因为可能会发送一个
List
,并尝试向该列表添加一个
整数

3-如果返回类型相同或是子类型,并且
Class
Class
与返回类型相同,因为它们都是返回类对象,并且任何
Class
对象都可以被类型转换为
Class
,反之亦然原因-
1-
Class
是指任何类型的
Class
对象,即
Class


2-具有
参数的函数不能编辑
类型的对象,但具有
参数的函数可以编辑对象。

例如-

// function 1
void m(List<?> list){
    list.add(3);
}
// function 2
void m(List<?> list){
    list.get(0);
}
//函数1
无效m(列表){
增加(3);
}
//职能2
无效m(列表){
list.get(0);
}
函数1不会编译,因为它有一个参数
List
,这意味着任何列表都可以作为参数发送,但它无法编辑,因为可能会发送一个
List
,并尝试向该列表添加一个
整数


3-如果返回类型相同或是子类型,并且
与返回类型相同,因为它们都是返回类对象,并且任何
对象都可以类型转换为
,反之亦然

非常不清楚,你能分享一下你为这个覆盖所做的尝试吗?但是,你不应该在新代码中编写2、3和4。他们使用的是原始类型,@Vinay Prajapati我只是在构建代码,以了解在继承过程中问号的用法。很不清楚,您是否可以分享您为这种重写尝试了哪些内容?但是,您不应该在新代码中编写2、3和4。他们使用的是原始类型,@Vinay Prajapati我只是在构建代码,以了解在继承过程中问号的用法。类是否意味着类?我认为课堂更接近课堂。您可以检查“public Class Func(Class cls)”不能覆盖它们中的任何一个。@jw_u是的,这是有意义的,因为
Class
只会除
Class
之外,而
Class
可以除任何类型的
Class
对象之外,Class是否意味着Class?我认为课堂更接近课堂。您可以检查“public Class Func(Class cls)”不能覆盖其中任何一个。@jw_u是的,这是有意义的,因为
Class
只能除了
Class
之外,而
Class
可以除了任何类型的
Class
对象之外