面向对象之继承super(),this()

来源:互联网 发布:大表妹是什么网络意思 编辑:程序博客网 时间:2024/05/16 10:09

论继承中的 super()this()

有些初学者可能会在这懵了!希望能帮到你们。。。。

如果懂的话!请忽视,但请看下下面的使用super&this应该注意些什么?

不说了,先上代码

public class Test_01 {public static void main(String[] args) {Son s = new Son();System.out.println("---------------");Son s1 = new Son("hello");}}class Grandpa{//无参public Grandpa() {System.out.println("爷爷类的无参构造方法");}//有参public Grandpa(String str) {System.out.println(str+"爷爷类的有参构造方法");}}class Father extends Grandpa{public Father() {super("hello");System.out.println("父类的无参构造方法");}public Father(String str) {System.out.println(str+"父类的无参构造方法");}}class Son extends Father{//无参public Son() {System.out.println("儿子类的无参构造方法");}//有参public Son(String str) {this();System.out.println(str+"儿子类的有参构造方法");}}

结果:

hello爷爷类的有参构造方法
父类的无参构造方法
儿子类的无参构造方法
---------------
hello爷爷类的有参构造方法
父类的无参构造方法
儿子类的无参构造方法
hello儿子类的有参构造方法


开始扯犊子了。。。

extends为java中的关键字,意思就是:继承。比如:儿子继承父亲   Son extends Father

在测试类Test_01    mian() 方法中 我是先 new 出一个 儿子类 Son 对象,但为什么结果会出现下面的结果呢?

hello爷爷类的有参构造方法
父类的无参构造方法
儿子类的无参构造方法

大家都知道在 Son 类 new 出一个对象时  会隐式的调用 Son 类的构造方法 , 但是 Son类是继承于Father类的,而Father类又是继承于Gandpa类。

通俗点来说就是:没有父亲哪来的儿子,没爷爷哪来的父亲!

所以,在 new 出 Son 类的同时 就把  Grandpa 类和 Father 类 的 无参的构造方法调用了。但有为啥先打印  Grandpa 类和 Father 类 的 无参的构造方法,还是那句话:没有父亲哪来的儿子,没爷爷哪来的父亲!

这也不对啊!结果 Grandpa 类的无参方法也没被调用啊,是因为在 代码中 Father 类 的无参的构造方法 lz 加入一句 super("hello");

重点:

super();                     调用父类的无参构造方法()

显而易见嘛!  super();是调用父类的无参构造方法,那么super("hello");就是调用父类的有参的构造方法呗!所以在执行 Father 类的无参构造方法时就调用了Grandpa类 的有参构造方法!结果在上面。。。。。


来扯下this()吧

重点:

this();                     调用本类的无参构造方法()

和上面类似一样!懒的打字了。。。。。。。。。。







使用super&this应该注意些什么?

1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
 
2super()this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
 
3super()this()均需放在构造方法内第一行。
 
4)尽管可以用this调用一个构造器,但却不能调用两个。
 
5thissuper不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
 
6this()super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
 
7)从本质上讲,this是一个指向本对象的指针然而super是一个Java关键字。





0 0