Java基础:this和super的用法
2015-08-01 08:08
585 查看
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.方法()”,这样便于代码的维护。
“`
最好把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关键字。
相关文章推荐
- Java String 正则表达式
- JAVA B/S通过摄像头采集图片信息解决方案。
- Java反射通用类 获取所有成员变量 构造方法 成员方法
- java环境变量配置
- 导出Eclipse环境配置
- 排序算法进阶(一)——快速排序算法
- java中的集合类
- Eclipse集成Android_NDK
- Eclipse集成Android_NDK
- springMVC --全局异常处理(两种方式)
- 在Spring中加入Struts2
- Maven搭建SpringMVC+Hibernate项目详解
- 在springmvc项目中使用kaptcha生成验证码
- SSH(SPRINGMVC)
- struts2的default.properties详解
- 定制Eclipse IDE之界面篇
- 5 class design principles [S.O.L.I.D.] in java
- SpringMVC+Spring+Hibernate配置
- 多租户--EclipseLink实现
- 转:OpenJDK和SunJDK的区别和联系