Java:this和super关键字(详解)
this和super的区别
super:
super | 代表父类对象的引用 |
---|---|
super() | 调用父类的构造方法 |
super.data | 调用父类的属性 |
super.func() | 调用父类的成员方法 |
this:
this | 代表当前对象的引用 |
---|---|
this() | 调用当前对象的构造方法 |
this.data | 调用当前对象的属性 |
this.fun() | 调用当前对象的成员方法 |
super: VS this:
super指代的是父类,和this指代的本类相对应
前提:
this:没有继承也可以使用.
super: 只能在继承条件下才能使用.
注意点:
- super()和this(),必须在构造方法的首行.
- super只能出现在子类的方法或者构造方法中.
- super和this不能同时调用构造方法,会有冲突.是super()和this()不能同时出现
- this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)。
private修饰的方法和属性无法被继承.
子类代码存在隐藏默认构造器,即调用父类的构造器。若父类构造器未被很好的定义,则子类无法定义构造器, 但是也可以通过get和set方法操作.
下面我们看一个示例:
class Person {//父类 public Person() { //父类的无参数构造方法(构造方法也称构造器) System.out.println("Person没有参数的构造方法"); } protected String name = "DlAM"; //父类的受保护的属性(可以被子类访问) public void print() { //父类的方法 System.out.println("Person"); } } class Student extends Person { //子类继承父类 private String name = "朵啦"; //子类的属性 public Student() { //子类的构造方法 //隐藏代码:调用父类的无参构造方法 //super(); 调用父类构造方法时必须在子类构造方法首行 System.out.println("Student没有参数构造方法"); } public void print() { //子类的方法 System.out.println("Student"); } public void test(String name) { System.out.println(name); System.out.println(this.name); //引用本类 System.out.println(super.name); //引用父类 } public void test1() { print(); this.print(); //引用本类 super.print(); //引用父类 } } public class Test { public static void main(String[] args) { Student student1 = new Student(); student1.test("朵啦爱萌"); student1.test1(); } }
运行结果:
简单介绍下set和get:
set是设置,而get是获取,这两个方法是对数据进行设置和获取用的。而且,在类中使用set和get方法时,都是在set和get后面跟上一些特定的词来形成特定意思的方法名,比如set xxx()get xxx(),表示设置xxx和获取xxx。
参考示例:
public修饰
class Person{ public int age ; // 声明年龄属性 public void tell(){ System.out.println("年龄:" + this.age); }}public class Test{ public static void main(String[] args){ Person per = new Person() ; // 声明并实例化对象 per.age = 30; //设置年龄 per.tell() ; // 输出信息 }}
运行结果:
private修饰
class Person{ private int age ; // 声明年龄属性 public void tell(){ System.out.println("年龄:" + this.age); }}public class Test{ public static void main(String[] args){ Person per = new Person() ; // 声明并实例化对象 per.age = 30; //设置年龄 per.tell() ; // 输出信息 }}
运行结果:
使用set和get
:
class Person{ private int age ; // 声明年龄属性 public void setAge(int a){ // 设置年龄 age = a ; } public int getAge(){ // 取得年龄 return age ; } public void tell(){ System.out.println( "年龄:" + this.getAge()) ; }}public class Test{ public static void main(String[] args){ Person per = new Person() ; // 声明并实例化对象 per.setAge(30) ; // 调用set设置年龄 per.tell() ; // 输出信息 }}
运行结果: