【知了堂学习笔记】java中this和super的用法

本文详细介绍了Java中this和super关键字的使用方法及其注意事项,包括它们如何在类的构造器和方法中引用当前对象及父类对象,以及在解决变量隐藏、调用不同构造器等方面的应用。

this

this表示当前类的对象,this可以用来修饰属性、方法、构造器。它在方法内部使用,即这个方法所属对象的引用;普通方法中,this总是指向调用该方法的对象;构造方法中,this总是指向正要初始化的对象。

this的用法:

1.直接引用,即this指向当前对象本身

public class TestDemo {
	public int age = 2;
	
	public void show() {
		this.age=3;
		System.out.println(age);
	}
	
	public static void main(String[] args) {
		TestDemo a = new TestDemo();
		a.show();
	}
}

2.区分同名的全局变量和局部变量

public class TestDemo {
	public int age = 2;
	
	public void show(int age) {
		System.out.println(this.age);
		System.out.println(age);
	}
	
	public static void main(String[] args) {
		TestDemo a = new TestDemo();
		a.show(6);
	}
}


3.调用本类的其它构造方法

public class TestDemo {
	public int age;
	
	public TestDemo(int age) {
		this.age = age;
		System.out.println(age);
	}
	
	public TestDemo() {
		this(8);
	}
	
	public static void main(String[] args) {
		TestDemo a = new TestDemo();
	}
}

this在使用过程中需注意以下几点:

1. this不能用于static方法,因为在static方法中不可以访问非static的成员 (不能用于mian方法) 。static修饰的方法是属于类的,该方法的调用者可能是一个类,而不是对象。如果使用的是类来调用而不是对象,则 this就无法指向合适的对象。所以static 修饰的方法中不能使用this。

2.通过this调用其它构造方法,必须位于方法(构造方法)第一句。


super

代表父类的对象,可以访问父类的属性、方法和构造器。

super的用法:

1.直接引用

public class TestDemo {
	public String name = "天天";
}
public class DemoSon extends TestDemo {
	public int age = 6;
	public void show() {
		System.out.println(super.name + "  " + age);
	}
	public static void main(String[] args) {
		DemoSon b = new DemoSon();
		b.show();
	}
}

2.子类与父类中的成员变量或方法同名

public class TestDemo {
	public String name = "天天";
	public void show() {
		System.out.println(name);
	}	
}
public class DemoSon extends TestDemo {
	public String name ="乐乐";
	public void show() {
		System.out.println(super.name);
		super.show();
	}
	public static void main(String[] args) {
		DemoSon b = new DemoSon();
		b.show();
	}
}

3.调用父类的构造函数

public class TestDemo {
	public String name = "天天";
	public TestDemo() {
		System.out.println("无参数的父类构造方法");
	}
	public TestDemo(String name) {
		System.out.println(name);
	}
}
public class DemoSon extends TestDemo {
	public String name ="乐乐";
	
	public DemoSon() {
		super("可乐");
	}
	public static void main(String[] args) {
		DemoSon b = new DemoSon();
	}
}

super在使用时需要注意以下几点:

1.super同样不能用于static方法(不能用于mian方法)。

2.通过super调用父类的构造方法,必须位于方法(子类构造方法)第一句。

3.Java不支持super多级调用,即super.super。


除了上面在使用this和super时需要注意的以外,还有几点比较重要。

1.this和super不能同时出现在一个构造函数里面。

2.如果没有显示调用超类的构造器,那么子类构造器就会默认调用超类的无参构造器,如果超类没有无参构造器,那么编辑器就会报错。例如:在父类中定义了一个有参数的构造函数(不定义,就只有默认不带参数的构造函数),子类通过super(),来调用父类的构造函数,此时编译器就会报错,超类中没有可用的默认构造器。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值