黑马程序员技术交流社区
标题: 子父类构造函数的特点 [打印本页]
作者: 丫头♡硪不走 时间: 2014-1-6 19:20
标题: 子父类构造函数的特点
class Person
{
int age;
String name;
Person(String name,int age){
this.name=name;
this.age=age;
}
}
class Student extends Person
{
//String name=san;
Student(){
// this.name=name;
super("zhangsan",20);
}
int age=10;
void study()
{
System.out.println("学习");
}
}
class Worker extends Person
{
Worker(){
super("lisi",36);
}
void dowork()
{
System.out.println("工作");
}
}
class PersonDemo
{
public static void main(String[] args)
{
Student p=new Student();
p.study();
Worker a=new Worker();
a.dowork();
// this.p.name=张三;
System.out.println(p.age);
System.out.println(p.name);
System.out.println(a.name);
}
}
}
作者: 渐渐不懂了 时间: 2014-1-9 14:03
本帖最后由 渐渐不懂了 于 2014-1-9 15:02 编辑
在对子类对象进行初始化时,父类的构造函数也会运行,
因为子类的构造函数默认第一行有一条隐形语句 super();
super():会访问父类中空参数的构造函
子类所有的构造函数,默认都会访问父类中的空参数的构造函数。
因为子类每一个构造函数内的第一行都有一句隐藏的super()
当父类中没有空参数的构造函数时,子类必须通过手动super语句形式来访问指定的构造函数
子类中第一行同样可以用this来访问本来中的构造函数,子类中至少会有一个构造函数会访问父类中的构造函数
作者: LuckyQS 时间: 2014-1-9 14:08
子类的所有的构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问父类中的构造函数
当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数
子类中至少会有一个构造函数会访问父类中的构造函数。
作者: IT人 时间: 2014-1-9 15:00
在子类的构造函数中都有一个隐式的super()方法,意思就是当你创建子类对象的时候,调用子类构造方法,那么子类构造方法就会调用父类的无参构造方法。当然你也可以指定调用父类的构造方法,例如你上边的代码: Worker(){
super("lisi",36);
}
作者: 路西法 时间: 2014-1-9 15:50
子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每个子类构造内第一行都有默认的语句
super();
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数,如果子类中用this;唉指定调用子类自己的构造函数,那么背调用的构造函数也一样会访问父类中的构造函数
作者: 铁矫狮情子 时间: 2014-1-9 16:18
变量:
如果子类中出现非私有的同名的成员变量时,子类要访问本类中的变量,用this关键字子类要访问父类中的同名变量,用super关键字,super和this的使用几乎一致,this代表的是本类对象的引用,super代表的是父类对象的引用,如果子类和父类有相同名称的变量时,子类继承父类后,在子类中默认使用的是自己的变量,因为在子类中是this.num省略了this。如果要用父类的变量只需要在变量前加上super.
函数:
当子类出现和父类一模一样的函数时,子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖了一样。这种现象是函数的另一种特性:重写(覆盖),当子类继承父类,沿袭了父类的功能到子类中,但是子类虽然具备该功能,但是功能的内容却和父类不一致,这个时候没有必要重新在子类中定义新功能,只需要重写父类的方法,覆盖需要注意的:子类覆盖父类,必须要保证子类权限大于等于父类权限,才可以覆盖,否则编译失败,静态只能覆盖静态.
子父类中的构造函数:
在对子类对象初始化时,父类的构造函数也会运行,因为子类构造函数的第一行都有一条隐式语句super();会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();子类一定要访问父类中的构造函数,因为父类中的数据子类可以直接获取,所以子类在建立时。需要先查看父类是如何对这些数据进行初始化的,访问父类中的构造函数可以手动定义super语句的方式来定义.
注意:super语句一定要定义在子类构造函数的第一行,并且不能和this();同时出现
作者: 小小菜鸟 时间: 2014-1-9 16:53
子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();
如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数。
如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |