super关键字与this关键字
1.super 关键字
super关键字是用来访问父类内容的。
super关键字的三种用法:
1.在子类的成员方法中,访问父类的成员变量;
2.在子类的成员方法中,访问父类的成员方法;
3.在子类的构造方法中,访问父类的构造方法。
Father
package cn.kobe.day01.demo06;
public class Father {
public Father(){
System.out.println("父类构造方法!");
}
int num = 20;
public void method(){
System.out.println("父类方法");
}
}
Sun
package cn.kobe.day01.demo06;
public class Sun extends Father{
//构造方法
public Sun(){
super();
System.out.println("子类构造方法!");
}
//访问成员变量
int num = 10;
public void methodSun(){
System.out.println(num);//子类的num
System.out.println(super.num);//父类的num
}
//访问成员方法
public void method(){
super.method();//访问父类中的method
System.out.println("子类方法");
}
}
2.this关键字
this关键字是用来访问本类内容
this关键字的的三种用法:
1.在奔雷的成员方法中,访问本类的成员变量;
2.在本类的成员方法中,访问本类的另一个成员方法;
3.在本类的构造方法中,访问本类的另一个构造方法。
第三种方法要注意:
A.this(...)调用也必须是构造方法的第一个语句。
B.super和this两种构造调用,不能同时使用。
Father
package cn.kobe.day01.demo07;
public class Father {
int num = 30;
}
Sun
package cn.kobe.day01.demo07;
public class Sun extends Father{
int num = 10;
public Sun(){
// super();//这一行不再赠送
this(123);//不可以自己调用自己this();重载调用
// this(123,45);//错误写法
}
public Sun(int n){
this(12,25);
}
public Sun(int n,int m){
// 此处不可以调用无参的,会报错(循环)
}
public void showNum(){
System.out.println(num);//局部变量
System.out.println(this.num);//本类中的成员变量
System.out.println(super.num);//父类中的成员变量
}
public void methodA(){
System.out.println("AAA");
}
public void methodB(){
this.methodA();//this在此处表示的是强调的字面作用
// methodA();//此方法也可以
System.out.println("BBB");
}
}
3.super与this关键字运行内存图解:
总结:Java继承的三个特点
- Java是单继承的:一个类的直接父亲只能有唯一一个;
- Java语言可以多级继承:父类可以再有父类,换句话说就是爷爷类;
- 一个子类的直接父类是唯一的,但是一个父类可以拥有很多个子类。