黑马程序员技术交流社区

标题: 子父类构造函数的特点 [打印本页]

作者: 丫头♡硪不走    时间: 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