黑马程序员技术交流社区
标题:
继承问题
[打印本页]
作者:
linder_qzy
时间:
2015-3-8 20:03
标题:
继承问题
class Person {
String name;
int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
}
复制代码
public class Student extends Person{
int num;
Student(String name,int age)
{
super(name,age);
}
Student(String name)
{
this.num = num;
}
Student()
{
}
public void studey()
{
System.out.println("study");
}
}
复制代码
为什么
Student继承了Person之后就子类就不能在写别的构造函数了。比如
Student(){} 和
Student(String name)
{
this.num = num;
}
这2句代码就会报错 为什么呢??
作者:
㏒假™面具
时间:
2015-3-8 20:15
因为继承以后,在Student的构造函数里面,默认持有super(); ,在你代码里面Person空参构造函数不存在
作者:
自学小番薯
时间:
2015-3-8 20:22
来学习学习
作者:
路文龙
时间:
2015-3-8 20:29
1、如果一个类中没有定义构造器,编译器在编译时会自动加上默认无参构造器:
public ClassName {}
2、this 和 super 的区别。
3、每个类直接或间接是Object的子类,Object只有一个无参构造方法。
4、编译器会在每个构造方法的第一行隐式添加父类的默认无参构造器,即添加super()。
上述代码中 因为父类定义了一个带参数的构造器,因此编译器不会添加默认无参构造方法,但是因为在子类的构造器中没有显式调用父类的某个构造方法,因此编译器会自动添加super()方法, 但是父类中不存在默认无参构造方法,因此会提示默认无参构造方法未定义错误。
因此实现父类中的无参构造函数,就不会报错了。
package cn.lu.test;
class Person {
String name;
int age;
Person(){
}
Person(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Student extends Person {
int num;
Student(String name, int age) {
super(name, age);
}
Student(String name) {
this.num = num;
}
Student() {
}
public void studey() {
System.out.println("study");
}
}
复制代码
作者:
linder_qzy
时间:
2015-3-9 10:23
路文龙 发表于 2015-3-8 20:29
1、如果一个类中没有定义构造器,编译器在编译时会自动加上默认无参构造器:
public ClassName {}
2、t ...
哦哦 感谢了哈 说的很明白
作者:
android-liu
时间:
2015-3-9 11:23
构造函数和继承结合的问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2