子类构造方法的参数名要和其父类构造方法的参数名相同吗?我怎么没有查到相关信息,这题答案说是AC,我把super方法放第一行后编译没报错呀
分析如下所示的Java代码,则选项中的说法正确的是( )(多选)。
class Parent{
public String name;
public Parent(String pName){
this.name = pName;
}
}
public class Test extends Parent { //1
public Test(String Name){ //2
name="hello"; //3
super("kitty"); //4
}
}
A. 第2行错误,Test类的构造函数中参数名称应与其父类构造函数中的参数名相同
B. 第3行错误,应使用super关键字调用父类的name属性,改为super.name="hello";
C. 第4行错误,调用父类构造方法的语句必须放在子类构造方法中的第一行
D. 程序编译通过,无错误
A. 语法上参数名用什么没什么要求,全凭自己喜好,A选项应该错误
B. 当前代码中使用 super
和 this
还有啥都不用效果是一样的,也就是说语法上没有问题,因为父类的 name
属性是 public
修饰的,子类是可以继承到的且子类没有定义自己的属性 name
,最终指向的都是父类的属性 name
,B选项应该错误
C. 调用父类构造方法确实应该放在第一行(不显式调用的话会自动隐式调用父类的无参构造方法,这里父类没有无参构造方法,所以必须显式调用) C选项是正确的。
D. 代码有错误,D选项错误
另外,这个题目是在哪弄来的,感觉怪怪的,Java里叫方法而不是函数,虽然这么说有抠字眼的嫌疑,但是这也反映出出题不够严谨,让我怀疑答案的正确性
再就是子类的构造方法,虽然语法上没什么问题,但是传进来的 Name
参数没有用到,而且给属性赋值时分别使用了不同固定值,不符合实际逻辑,所以基本只会出现在题目中。
它的答案说A选项也是正确的,那我可以猜测出题人是想把约定成俗的编程规范也作为判断规则而不仅仅是语法,如果这样的话那父类的构造方法参数名应该与它指向的属性名也就是 name
相同,而不是使用 pName
。另外这种编程规范各个公司各个程序猿都是不尽相同的,根本不像语法一样有一个统一的正确规定,所以将这个作为判断规则根本就是错误的。
先说答案吧,答案是BC.
在说一下各答案的意思:
A:构造函数的参数名为形参,取名是可以不需要跟父类一样.
B:调用父类的属性是需要用super关键字的.
C:调用父类的构造函数,则必须放在子类构造函数的第一行,注释之类的除外
D:这就不用说了