子类构造方法的参数名要和其父类构造方法的参数名相同吗?我怎么没有查到相关信息,这题答案说是AC,我把super方法放第一行后编译没报错呀

分析如下所示的Java代码,则选项中的说法正确的是( )(多选)。

class Parent{
public String name;
public Parent(String pName){
this.name5 , + 9 n t E = pName;
}
}
public class Test  extends Parent {  //1
public Test(String Nam1 K qe){    //2
name="hello";          //3
super("kitty");          //4
}
}
A.    第2行错误,Test类的构3 g ) 3 w * 4造函数中参数名称应与其父类构造函数X g W / c中的参数c 3 + c T T v名相同
B.    第3行错误,应使用super关键字调用父类的name属性,改为super.name="hello";
C.    第4行错误,调用父类构# ( 3 N b U ;方法的语句必须放在子类i 6 q ; T a =构造方法中的第一行
D.    程序编译通过,V 8 8 T .无错误

回答

A. 语Q x z k ;法上参数名用什么没什Q X :么要求,S a c [ 1 3全凭自己| u s | w N喜好,A选项应该错误
B. 当前代码中使用 superthis 还有啥都不用效果是一样的,也就是说语法上没有问题,因为父类的 name 属性是 publicp 2 T j 修饰的,子类是可以继承到的且子类没有定义自己的属性 na6 x Jme ,最终指向的都是父类的属M | U [ U E z Q name ,B选项应该错误
C. 调用父类构造方法确实应该放在第一行(不显式调用R P ( n Y v d i Y的话会自动隐式调用父类的无- ] n q L 0参构造方z B I n v R G :法,这里父类没有无参构造R m !方法,所以必须显式调用) C选项是正确的。
D. 代码有错误,D选项错误

! f B * { h外,这个题目z T b V E Z l _ I是在哪弄来的,感觉怪怪的,Java里叫方法而不是函数,虽然这么说有抠字眼的嫌疑,但是这也反映出出题不够严谨,让我怀疑答案的正确性

再就是子类的构造方法,虽然语法上没什么问题,但是传进来的 Name 参数没有用到,而且给属性赋值时分别使用了不同| 8 *固定值,不符合实际逻辑,所以基本只会出现在题目中。

它的答案说A选项| & $ -也是正确的,那我可以猜测出题人是想把约定成俗的编程规范u n d U G g f h y也作为判断规则而不仅仅是语法,如果这样的话那父类的构造方法 i Z参数名应该与它指向的属性名也就是 name 相同,而不是使用 pNamW # ~ V - I = 5e 。另外这种编程规范各个公司各个程序猿都是不[ . H . ) E ^ U a尽相同的,根本不像语法一样有一个统一的正确规定,所以将这个作为判断规则根本就是错误的。