Java基础:this和super的用法

this的用法

public class Dog extends Animal{
    /*this的两种用法:
     * 1.调用本类中的构造器(this()必须写在第一行)eg:this("黄毛")。
     * 2.调用本类中的方法,eg:this.sleep(); */
    public Dog(){
        this("黄毛");       //调用本类中的构造器
//调用本类的构造器,必须写在第一行      
//super 调用父类构造器,必须写在第一行     
    }
    public Dog(String color){    //被调用的本类中的构造器
    }
    @Override//表示下面的是覆写方法。
    public void voice(){
        System.out.println("狗叫");
    }
    public void voice(String name){
        System.out.println("看见张三就咬");
    }
    public void voice(int age){
        this.sleep();       //在方法中指的是调用该方法的那个对象
        System.out.println("看见年轻的就跑");
    }
    public void sleep(){
        System.out.println("狗睡觉了");
    }

this和super的用法区别

this和super的区别
this和super的区别

既然this和super都可以调用构造,那么这两者绝对不能同时出现,因为只要是调用构造,就必须将语句放在构造方法的首行,而且以后开发的时候建议明确的写出“this.方法”或者“super.方法()”,这样便于代码的维护。

“`
最好把super和this放在一起,对比着理解。
super指向父类,用于引用父类的构造方法。
this指向本类,用于引用本类中的其他方法。
这么说太抽象,下边是一个很经典的例子,完全体现了super和this的用法和区别,请花几分钟把它读完:
class Person {
public static void prt(String s) {
System.out.println(s);
}

Person() {  
   prt("A Person.");  
}//构造方法(1)  

Person(String name) {  
   prt("A person name is:" + name);  
}//构造方法(2)  

}

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

3.总结this跟super的异同

下边总结一下super和this的异同:
1)super(参数):调用父类的构造方法 。
2)this(参数):调用本类的其他构造方法。
3)都必须放在构造方法的第一行。
3)super:引用父类中的成员,当子类和父类中的方法重名时,这样用。
4)this:代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)。
5)this()和super()都指的是对象,所以,均不能在static环境中使用。包括:static变量,static方法,static语句块。
6)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值