基础代码:
class Fu{
int num1=3;
}
class Zi extends Fu{
int num2=4;
void show(){
System.out.println(num1);
System.out.println(num2);
}
}
public class extendsBasic {
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
输出:3/4
当子父类中的变量名一致时:
class Fu{
int num=3;
}
class Zi extends Fu{
int num=4;
void show(){
System.out.println(num);
// System.out.println(num2);
}
}
public class extendsBasic {
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
输出:4
运行:
1.main类加载,运行到子类的对象建立,要加载Zi类。因为Zi类后有extends 关键字,所以要先加载父类——类加载完成。创建对象(对象中的变量有两个num )1.执行Zi构造函数——在函数里先执行super();(父类的构造函数进栈,完成父类的显示初始化)2.再执行Zi的构造函数(完成子类的显示初始化)————对象的构造完成
(对象中的值是类的成员变量——成员变量的存在依附于对象的创建)
2.调用show 方法——找num 变量。先在局部找(局部变量)然后在对应的对象中找(成员变量),找不到就再进入父类中
class Fu{
int num=3;
}
class Zi extends Fu{
// int num=4;
void show(){
System.out.println(this.num);
// System.out.println(num2);
}
}
public class extendsBasic {
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
输出: 3
同时访问子类和父类的变量(变量名一致)
class Fu{
int num=3;
}
class Zi extends Fu{
int num=4;
void show(){
System.out.println(this.num);
System.out.println(super.num);
}
}
public class extendsBasic {
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
输出:4 3
关于this / super
this :代表的是当前的对象
super: 代表的是父类的这片区域
可以直接输出this 不能直接输出(this 可以单用,但super 不能单独使用)
本类用this 父类用super
关于子类和父类的成员变量名一致时总结:
成员变量都在子类的对象中
要同时访问子类和父类的这个变量,父类用关键字super