A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chenyannna 中级黑马   /  2015-9-22 16:10  /  3687 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

3黑马币
  1. class Student {

  2.         private String name;
  3.         private int age;
  4. //问题1:这个算是空参数构造函数?还是其他?什么作用       
  5.         public Student() {
  6.                 super();
  7.         }
  8. //问题2:这里的super()有什么样用?和上面的不重复吗?       
  9.         public Student(String name, int age) {
  10.                 super();
  11.                 this.name = name;
  12.                 this.age = age;
  13.         }
  14. //问题3:什么时候需要覆盖toString()方法呢?       
  15.         public String toString() {
  16.                 return "Student [name=" + name + ", age=" + age + "]";
  17.         }                       
  18. }       
  19. //问题5:问题1和2的public不写和写有没有区别?一定要写吗?
复制代码

最佳答案

查看完整内容

第一个问题 :这个是空参数构造方法,作用是显示调用父类构造方法 第二个问题:这个带参数的构造方法也是调用父类的带参数的构造方法,跟第一个是不重复的,第一个调用的是父类不带参数的构造方法。 第三个问题:Object中的toString都是输出对象的HashCode值,当你的类需要跟别的类比较属性值时,例如比较姓名或者年龄或者内容时候就可以覆盖这个方法了,如果你只是比较2个类对象的地址就不用覆盖, 第四个问题:public可以不写,写 ...

8 个回复

倒序浏览
第一个问题 :这个是空参数构造方法,作用是显示调用父类构造方法
第二个问题:这个带参数的构造方法也是调用父类的带参数的构造方法,跟第一个是不重复的,第一个调用的是父类不带参数的构造方法。
第三个问题:Object中的toString都是输出对象的HashCode值,当你的类需要跟别的类比较属性值时,例如比较姓名或者年龄或者内容时候就可以覆盖这个方法了,如果你只是比较2个类对象的地址就不用覆盖,
第四个问题:public可以不写,写的话任何类和任何包都可以方法这个构造方法,如果不写的话就是默认Default修饰的,只在自己的包中才能被访问。

希望答案能让你满意
回复 使用道具 举报
问题1.
这个算空的构造函数,作用是初始化一个实例。比如你在 Student s = new Student();的时候就用到了这个
空的构造函数,如果你不写一个空的构造函数,系统会自动生成一个。
问题2.
super()表示调用父类的构造函数。是一个特殊语法,不是变量,没有什么类型。
再说这个构造函数,就是带有初始化的构造函数,当你在Student s = new Student(“晓明”,22);
的时候,实例化的对象s 在初始化的时候其中的成员变量name和age就已经被赋值了。
问题3.
这个问题我不太懂。
问题5.(这个是不是问题4?哈哈)
定义一个构造函数规定 必须是没有返回值类型的。
如果加上public,就代表此类可以对外开放,其他的类可以继承它,外部也可以实例化该对象。
如果不加public,则默认的修饰词是protected,代表只对同包开放。

以上回答希望可以给你带来帮助。

点评

默认的不是protected 默认的就是没有修饰符  发表于 2015-9-22 21:34
回复 使用道具 举报
黑白世界 发表于 2015-9-22 16:47
问题1.
这个算空的构造函数,作用是初始化一个实例。比如你在 Student s = new Student();的时候就用到了这 ...

再问一句。两个super()可以不写吗?应该不写的话也会默认添加吧?
回复 使用道具 举报
第一个是空参数构造函数,不过,你里面有super的话,就代表你这个类上面有父类,并且,new student对象的时候,空参数构造方法会调用父类构造方法
第二个是只有传入指定的参数的时候,才会去调用这个构造方法,并且,空参数是new对象的时候,区别在这里
第三个是你觉得需要的时候就去toString,不过一般时候是不需要的
回复 使用道具 举报
我来回答下第3个问题:超类Object中,toString()方法返回的是:该对象的字符串表示。
所以通常自定义的类中还是要对这个方法复写的,因为每个对象的字符串表示不同,就例如这里的Student类。
该对象的字符串表示是姓名 年龄。
回复 使用道具 举报
chenyannna 发表于 2015-9-22 17:17
再问一句。两个super()可以不写吗?应该不写的话也会默认添加吧?

对的,两个super()是可以不写的,因为子类的构造函数里,就有一个隐士的父类的空构造函数。你就不写,程序运行子类的构造函数的时候,也会自动的先读取这个super()空函数的。第三个toString问题,其实复写不复写都无所谓,如果你开心,名字随便起。只是就起了这个toString名字就是了,无所谓的,就是个名称,不用去纠结复写不复写。
回复 使用道具 举报
来学习学习,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马