Java入门(八)——关键字this和super

Java入门(八)——关键字this和super

目录

Java入门(八)——关键字this和super

this关键字

super关键字

总结

范例代码


this关键字

 * 用法及含义:
            * this.属性名——调用对象:
                  - 在构造方法中使用this关键字对属性赋值,this表示当前对象具有变量,没有this的一端是参数传递的值       
            * this.方法名(实参)——调用对象:
                  - Java允许对象的一个成员方法直接调用另一个成员方法,可以省略this前缀
                  - static修饰的方法中不能使用this引用【Java语法规定,静态成员不能直接访问非静态成员】
                  - 如果传递一个对象的引用到static修饰的静态方法,需要创建其自身的对象,通过这个对象的引用,调用非静态方法和访问非静态数据成员  
            * this(实参)——访问构造方法:
                  - 用来访问本类的构造方法
                  - 只能使用在构造方法中,并且为第一条语句
 - this能出现在实例方法和构造方法
 - 不能出现在静态方法中
 - 用来区分局部变量和成员变量,this不能省略

super关键字

       * 用法及含义:
            * super.属性名——访问父类的属性
            * super.方法名(实参)——访问父类的方法
            * super(实参)——访问父类的构造方法
                  - 表示通过子类的构造方法调用父类的构造方法
                  - 模拟现实世界场景:现有父再有子
                  - 只能使用再构造方法中,并且为第一条语句
       - 能出现在实例方法和构造方法中
       - 不能使用在静态方法中
       - 当父中有,子中有,想要在子中访问“父的特征”,不能省略super
       - super(实参)的作用是:初始化当前对象的父类特征,并非是创建新对象
       - super代表的是“当前对象”特征的继承

总结

- 如果构造方法都没有出现this()和super(),那么便默认有一个super();来继承父类的无参数构造方法
- 由于this()和super()都只能出现再构造方法的第一条语句,所以两者不能同时在一个构造方法中出现
- 无论怎么调用,父类的构造方法都会使用

范例代码

class Teacher{
	String name="张三";

	public Teacher(String name){
		System.out.println("this.name-->"+this.name);//张三
		this.name=name;//this不能省略,用来区分局部变量和成员变量
		System.out.println("name-->"+name);//lisi
	}
	
	public void run1(String r) {
		System.out.println("这里是"+r);
	}
	public void run2() {
		this.run1("run2");//调用本类的方法
		//this可以省略
	}
	
	public Teacher() {
		this("王五");//无参数构造方法调用本类中有参数的构造方法
	}
}
class Sudents extends Teacher{
	public Sudents() {//默认存在super(),所以调用父类的无参数构造方法
	}
	public Sudents(String name) {
		super("学生A");//调用父类的有参数构造方法
		System.out.println(super.name);//因为原来父亲的属性被更改,所以输出父类的属性为更改后的
	}
	public void s() {
		System.out.println(super.name);//输出父类的属性
		super.run1("子类的普通方法");
	}
	
}

public class ThisAndSuper {
	
	public static void main(String[] agrs) {
		Teacher t=new Teacher("lisi");//创建对象的有参数构造方法调用
		
		System.out.println("------------------------");
		
		t.run1("run1");
		t.run2();
		
		System.out.println("------------------------");
		
		Teacher tt=new Teacher();//创建对象的无参数构造方法调用
		
		System.out.println("------------------------");
		
		Sudents s=new Sudents();
		new Sudents("老师A");
		s.s();
	}
	

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值