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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© DH柯 中级黑马   /  2015-1-11 09:26  /  2556 人查看  /  21 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


代码代码

  class Person {

    public static void prt(String s) {

       System.out.println(s);

    }

    Person() {

       prt("A Person.");

    }

    Person(String name) {

       prt("A person name is:" + name);

    }

}

public class Chinese extends Person {

    Chinese() {

       super(); // 调用父类构造函数(1)

       prt("A chinese.");// (4)

    }

    Chinese(String name) {

       super(name);// 调用父类具有相同形参的构造函数(2)

       prt("his name is:" + name);

    }

    Chinese(String name, int age) {

       this(name);// 调用当前具有相同形参的构造函数(3)

       prt("his age is:" + age);

    }

    public static void main(String[] args) {

       Chinese cn = new Chinese();

       cn = new Chinese("kevin");

       cn = new Chinese("kevin", 22);

    }

}

      结果为:A Person.

A chinese.

A person name is:kevin

his name is:kevin

A person name is:kevin

his name is:kevin

his age is:22

          在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。但这样似乎就有点画蛇添足的味道了。

4.super和this的异同:

       1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)

         2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
   3)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名    super.成员函数据名(实参)

       4)this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)


       5)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。

     6)super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。

     7)super()和this()均需放在构造方法内第一行。

     8)尽管可以用this调用一个构造器,但却不能调用两个。

     9)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。

     10)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。

     11)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。


评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 赞一个!

查看全部评分

21 个回复

倒序浏览
谢谢分享
回复 使用道具 举报

不用!!!!!!!!!!!!!!!
回复 使用道具 举报

不用谢!!!!!!!!!!!!!!!
回复 使用道具 举报

不用谢!!!!!!!!!!!!!!!
回复 使用道具 举报

不用谢!!!!!
回复 使用道具 举报
感谢分享,很受用
回复 使用道具 举报
给力啊 老大
回复 使用道具 举报

感谢分享,很受用
回复 使用道具 举报
分享了LZ
回复 使用道具 举报
来学习下!
回复 使用道具 举报
gecl 中级黑马 2015-1-11 13:05:59
12#
好长啊。。。。不过谢谢分享
回复 使用道具 举报
马上就要学到这个了。不错。
回复 使用道具 举报

感谢分享,很受用
回复 使用道具 举报
谢谢分享..
回复 使用道具 举报
谢谢楼主分享
回复 使用道具 举报
执笔画梦 来自手机 中级黑马 2015-1-11 19:21:43
17#
好复杂啊
回复 使用道具 举报
写的不错啊,感谢分享
回复 使用道具 举报
super和this的区别?
                A:super是一个关键字,代表父类的存储空间标识。(可以理解为父亲的引用)
                B:它和this的用法相似
                        a:成员变量
                                this.变量        --        本类的
                                super.变量        --        父类的
                        b:构造方法
                                this(...)        --        本类的
                                super(...)        --        父类的
                        c:成员方法
                                this.方法名()        --        本类的       
                                super.方法名()        --        父类的
其实理解了以后,像上面的更好记忆!
回复 使用道具 举报
楼主写的很详细,学习了。。。。。。。。。。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马