java中的super和this的使用和区别

(1)super()函数
基本格式是:super([arg_list]);
直接用super()加上父类构造器所需要的参数,就可以调用父类的构造器了。如果父类中有多个构造器,系统自动根据super()中参数个数和参数类型类匹配父类中的构造器。
如果子类中没有显式地调用父类中无参数的构造器,也没有在构造器中调用重载的其它构造器,那么系统将会默认调用父类中无参数的构造器。此时如果父类中没有无参的构造器,则编译将会出错。

子类中的成员方法在使用super的时候,一般尽可能的使用private私有化。
子类构造方法调用父类的构造方法一般用super(参数列表)的方式调用,参数不是必须的。同时还要注意,super(参数列表)这条语句只能用在子类构造方法体中的第一行。
调用父类方法、属性当super用于引用父类的属性或方法时,使用下面的格式:
super.属性
super.方法([arg_list])
注意,在这个时候,父类的属性或方法必须是那些protected或者public等可以让子类访问的属性或者方法。

class Animal {
    public Animal() {
        System.out.println("An Animal");
    }
}
class Dog extends Animal {
    public Dog() {
        super();
        System.out.println("A Dog");
    }
}
class Test{
    public static void main(String [] args){
        Dog dog = new Dog();
    }
}
代码执行结果为:
An Animal 
A Dog

定义子类的一个对象时,会先调用子类的构造函数,然后在调用父类的构造函数,如果父类函数足够多的话,会一直调用到最终的父类构造函数,函数调用时会使用栈空间,所以按照入栈的顺序,最先进入的是子类的构造函数,然后才是邻近的父类构造函数,最后再栈顶的是最终的父类构造函数,构造函数执行是则按照从栈顶到栈底的顺序依次执行,所以在这个例子的执行结果是先执行Animal的构造函数,然后再执行子类的构造函数。
(2)this()函数:主要应用于同一类中从某个构造函数调用另一个重载版的构造函数。

1)每个类的每个非静态方法(没有被static修饰)都会隐含一个this关键字,它指向调用这个方法的对象;当在方法中使用本类属性时,都会隐含地使用this关键字,当然也可以明确使用。this可以看成是一个变量,它的值就是当前对象的引用,this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用如果是在同一类中调用另外一个方法,则可以不用写this,直接调用。
2)为了区分属性和局部变量,可以通过this关键字来调用。
3)this关键字的用法

*当类中非静态方法的参数名与类的某个成员变量名相同时,为了避免参数作用范围覆盖了成员变量的作用范围,必须明确使用this关键字来指定。
*如果某个构造方法的第一条语句具有形式this(…),那么这个构造方法将调用本类中的其他构造方法。
*如果某个方法需要传入当前对象,则可以将当前的对象作为参数传递给它。

class Mini extends Car {
    Color color;
    //无参数函数
    public Mini() {
        this(color.Red);
    }
    //真正的构造函数
    public Mini(Color c){
        super("mini");
        color = c;
    }
   
    public Mini(int size) {
        //super(size); 不能同时调用super()和this()
        this(color.Red);
}

小结:1)super()主要是对父类构造函数的调用,this()是对重载构造函数的调用。
 2)super()主要是在继承了父类的子类的构造函数中使用,是在不同类中的使用;this()主要是在同一类的不同构造函数中的使用。
但是super()和this()都必须在构造函数的第一行进行调用,否则就是错误的。所以在同一个构造函数中this()和super()不能同时出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值