关键字this和super

this和super的区别
区别点thissuper
访问属性访问本类中的属性,如果本类没有此属性则从父类中继续查找直接查找父类中的属性
调用方法访问本类中的方法,如果本类没有此方法则从父类中继续查找直接查找父类中的方法
调用构造器访问本类中的构造器,必须放在构造器的首行访问父类中的构造器,必须放在子类构造器的首行

关键字this

1. this的定义

this可以理解成当前对象, this可以调用类的属性,方法,构造器 。
它在方法内部使用,即这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象.

2. this的使用

this 调用类中的属性和方法
(1) 在方法(构造器)中,可以通过使用"this."来调用当前对象(正在创建的对象)的属性和方法。 往往我们都会省略掉"this."。
(2) 但是如果方法的(构造器的)形参和属性的名字相同时,那么就必须使用 "this."用来区分属性和局部变量
this 调用构造器
格式 :this(形参列表)
作用 :调用 本类中的其它构造器
说明:
   1. this(形参列表)必须放在构造器的首行
   2. 同一个构造器中最多只能有一个this(形参列表)
   3. 如果一个类有N个构造器,那么最多只能有N-1个this(形参列表)
   4. 构造器中 不能通过"this(形参列表)"的方式调用自身构造器
class Person{  // 定义Person类
	String name;
	String job;
	Person(String name){
		this.name = name;//此处的this不能省,因构造器的形参和属性的名字相同
	}
	Person(String name, String job){
		this(name);//调用本类中的其他构造器
		this.job = job;
	}
	public void getInfo(){	
		System.out.println("Person类 --> " + this.name) ; 
	}
	public boolean compare(Person p){
		return this.name == p.name;
	}  
}
public class PersonTest{
	public static void main(String args[]){
		Person per1 = new Person("张三") ;	
		Person per2 = new Person("李四") ;	
		per1.getInfo() ;	// 当前调用getInfo()方法的对象是per1
		per2.getInfo() ;	// 当前调用getInfo()方法的对象是per2
		boolean b = per1.compare(per2);// b = false
	}  
}

关键字super

1. super的定义

Java类中使用super来调用 父类中的指定操作, super可以调用父类的属性,方法,构造器 。

2. super的使用

super调用父类中的属性和方法
(1) 在子类的构造器和方法中可以使用"super."调用父类中的属性和方法,我们可以省略"super."。
(2) 如果子类和父类中的属性名相同或者子类重写了父类中的方法, 那么必须使用"super."来区分调用的是子类的还是父类的。
super调用父类中的构造器
格式 :super(形参列表)
说明 :
   1. 子类中所有的构造器默认都会访问父类中空参数的构造器 当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或者super(参数列表)语句指定调用本类或者父类中相应的构造器。
   2. super(形参列表)和this(形参列表)同时只能有一个,并且必须放在构造器的首行
   3. 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错
   4. 在子类的构造器中如果没显示的使用super(形参列表)和this(形参列表),默认使用super()

总结 :创建子类对象必调父类构造器

//使用super调用方法
class Person {
    protected String name = "张三";
    protected int age;
    public String getInfo() {
        return "Name: " + name + "\nage: " + age;
    }
}
class Student extends Person {
    protected String name = "李四";
    private String school = "New Oriental";
    public String getSchool() {
        return school;
    }
    public String getInfo() {//使用super调用父类中的方法
        return super.getInfo() + "\nschool: " + school;
    }
}
public class StudentTest {
    public static void main(String[] args) {
        Student st = new Student();
        System.out.println(st.getInfo());
        /*输出结果
        Name: 张三
		age: 0
		school: New Oriental
		*/
    }
}
//使用super调用构造器
class Creature {
    public Creature() {
        System.out.println("Creature无参数的构造器");
    }
}
class Animal extends Creature {
    public Animal(String name) {
        System.out.println("Animal带一个参数的构造器,该动物的name为" + name);
    }
    public Animal(String name, int age) {
        this(name);
        System.out.println("Animal带两个参数的构造器,其age为" + age);
    }
}
public class Wolf extends Animal {
	public Wolf() {
	    super("灰太狼", 3);
	    System.out.println("Wolf无参数的构造器");
	}
    public static void main(String[] args) {
        new Wolf();
    }
    /*
     输出结果为:
     	Creature无参数的构造器
	 	Animal带一个参数的构造器,该动物的name为灰太狼
	 	Animal带两个参数的构造器,其age为3
	 	Wolf无参数的构造器
     */
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值