afang518 2020-09-11 02:08 采纳率: 0%
浏览 130
已采纳

子类构造方法的参数名要和其父类构造方法的参数名相同吗?我怎么没有查到相关信息,这题答案说是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.    程序编译通过,无错误
  • 写回答

3条回答 默认 最新

  • 王二小丷 2020-09-11 09:49
    关注

    A. 语法上参数名用什么没什么要求,全凭自己喜好,A选项应该错误
    B. 当前代码中使用 superthis 还有啥都不用效果是一样的,也就是说语法上没有问题,因为父类的 name 属性是 public 修饰的,子类是可以继承到的且子类没有定义自己的属性 name ,最终指向的都是父类的属性 name ,B选项应该错误
    C. 调用父类构造方法确实应该放在第一行(不显式调用的话会自动隐式调用父类的无参构造方法,这里父类没有无参构造方法,所以必须显式调用) C选项是正确的。
    D. 代码有错误,D选项错误

    另外,这个题目是在哪弄来的,感觉怪怪的,Java里叫方法而不是函数,虽然这么说有抠字眼的嫌疑,但是这也反映出出题不够严谨,让我怀疑答案的正确性

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

    它的答案说A选项也是正确的,那我可以猜测出题人是想把约定成俗的编程规范也作为判断规则而不仅仅是语法,如果这样的话那父类的构造方法参数名应该与它指向的属性名也就是 name 相同,而不是使用 pName 。另外这种编程规范各个公司各个程序猿都是不尽相同的,根本不像语法一样有一个统一的正确规定,所以将这个作为判断规则根本就是错误的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 风丶飞 2020-09-11 09:25
    关注

    先说答案吧,答案是BC.

    在说一下各答案的意思:
    A:构造函数的参数名为形参,取名是可以不需要跟父类一样.
    B:调用父类的属性是需要用super关键字的.
    C:调用父类的构造函数,则必须放在子类构造函数的第一行,注释之类的除外
    D:这就不用说了

    评论
  • zqbnqsdsmd 2020-09-11 09:30
    关注
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 webapi的部署(标签-服务器)
  • ¥20 怎么加快手机软件内部计时的时间(关键词-日期时间)
  • ¥15 C语言除0问题的检测方法
  • ¥15 为什么四分管的内径有的是16mm有的15mm,四分不应该是12.7mm吗
  • ¥15 macos13下 ios交叉编译的问题
  • ¥15 bgz压缩文件怎么打开
  • ¥15 封装dll(引入了pcl的点云设计库)
  • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
  • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
  • ¥15 小新14API2019想用bios调风扇