黑马程序员技术交流社区
标题:
几个小例子让你分清super和this
[打印本页]
作者:
zhangyibiao
时间:
2016-3-9 23:11
标题:
几个小例子让你分清super和this
首先让我们来看以下this和super都有什么功能:
this:
访问本类对象成员变量 this.变量名
调用本类普通方法 this.方法名(参数)
本类构造方法调用本类其他构造 本类构造方法第一行this(参数)
super:
访问本类对象当中的父类对象成员变量 super.变量名
调用本类对象当中的父类普通方法 super.方法名()
本类构造方法调用父类构造 本类构造方法第一行super(参数)
然后我们将super和this对比着来验证:
验证this可以访问本类对象成员
新建一个Animal类书写如下代码
public class Animal {
public String name="咪咪";
public int age=4;
}
复制代码
新建一个Cat类继承Animal类,并且在该类中定义一个showNameAge()的方法书写代码如下:
public class Cat extends Animal {
private String name="丫丫";
private int age=2;
public void showNameAge(){
System.out.println(this.name+"今年"+this.age+"岁了!");
}
}
复制代码
然后新建测试类Test,创建cat对象,并调用showNameAge()方法,运行
public class Test {
public static void main(String[] args) {
Cat cat=new Cat();
cat.showNameAge();
}
}
复制代码
运行后我们发现输出为:丫丫今年2岁了!,所以this调用的是本类对象的成员变量
2.验证super可以访问本类对象当中的父类对象成员变量
将上述cat类的showNameAge()方法中的this改为super,运行程序,输出结果为:咪咪今年四岁了!故而验证了super可以访问本类对象当中的父类对象成员变量
3.this可以调用本类普通方法
在验证1中的cat类中,加入一个方法名为testThis()的方法,代码如下
public class Cat extends Animal {
private String name="丫丫";
private int age=2;
public void showNameAge(){
System.out.println(this.name+"今年"+this.age+"岁了!");
}
public void testThis(){
this.showNameAge();
}
}
复制代码
然后在Test类中,将无用代码注释,创建cat对象,并调用testThis方法,代码如下
public class Test {
public static void main(String[] args) {
Cat cat=new Cat();
cat.testThis();
}
}
复制代码
运行输出结果为丫丫今年2岁了!进而验证了this可以调用本类普通方法
4. super调用本类对象当中的父类普通方法
针对验证3中的cat类,将showNameAge()方法改为如下
public void showNameAge(){
System.out.println(super.getName()+"今年"+super.getAge()+"岁了!");
}
复制代码
并运行结果为:咪咪今年4岁了!我们通过super调用了Animal类的getName()方法,所以验证了super调用本类对象当中的父类普通方法
5. this可以通过本类构造方法调用本类其他构造
在cat类中写两个构造方法,代码如下
public Cat(){
System.out.println("利用this调用了本类的空参构造方法");
}
public Cat(String name, int age) {
this();
}
复制代码
将其他代码注释,然后在Test类中,将其余代码注释,书写代码如下:
Cat cat2=new Cat("豆豆",4);
复制代码
运行结果为:利用this调用了本类的空参构造方法
可以验证this可以通过本类构造方法调用本类其他构造
6super可以通过本类构造方法调用父类构造
将cat类修改如下:
public class Cat extends Animal {
private static String name;
private static int age;
public Cat(){
super(name,age);
}
public Cat(String name, int age) {
super();
}
}
复制代码
将Animal的构造方法书写如下:
public Animal(){
System.out.println("父类的空参构造方法被调用了!");
}
public Animal(String name,int age){
System.out.println("父类的满参构造方法被调用了!");
this.name=name;
this.age=age;
}
复制代码
在Test类中书写代码如下:
Cat cat2=new Cat("豆豆",4);
Cat cat=new Cat();
复制代码
运行可以看到两条信息: 父类的空参构造方法被调用了!
父类的满参构造方法被调用了!
因此验证了super可以通过本类构造方法调用父类构造
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2