访问变量优先级:子类局部变量>子类成员变量>父类成员变量
访问成员方法优先级:子类成员方法>父类成员方法
如果想先访问父类成员方法,用super.方法名()
访问变量优先级测试代码:
package Experience;
public class Test {
public static void main(String[] args){
Teacher te=new Teacher();
te.act();
}
}
package Experience;
public class Student {
private String name;
private int age=70;
Student(){
}
Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println(name+","+age);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age){
if(age<=0){
System.out.println("年龄错误");
}else{
this.age=age;
}
}
public int getAge() {
return age;
}
}
package Experience;
public class Teacher extends Student {
public int age=80;
public void act(){
int age=90;
System.out.println(age);
}
}
如果我们要访问父类成员变量,使用super,
super.name super.age都是指向父类的成员变量
和this.name this.age的用法一样
package Experience;
public class Test {
public static void main(String args[]){
Teacher te=new Teacher();
te.act();
}
}
package Experience;
public class Student {
private String name="小兰";
public int age=70;
Student(){
}
Student(String name,int age){
this.name=name;
this.age=age;
}
public void show(){
System.out.println(name+","+age);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age){
if(age<=0){
System.out.println("年龄错误");
}else{
this.age=age;
}
}
public int getAge() {
return age;
}
}
package Experience;
public class Teacher extends Student {
public int age=80;
public void act(){
int age=90;
System.out.println(age);
//父类的成员变量没有被private修饰用super.age
//如果有private用super.getAge()
System.out.println(super.age);
System.out.println(super.getName());
}
}
但是提到super,在子类的构造方法中,第一行语句必须是调用父类的构造方法,没有的话编译器会自动加上super()
注意:是调用父类的无参构造方法,语句是super();
调用父类有参构造方法,语句是super(参数);
下面看例子:
package Experience;
public class Test {
public static void main(String args[]){
Teacher te=new Teacher();
}
}
package Experience;
public class Student {
private String name="小兰";
public int age=70;
Student(){
System.out.println("父类无参");
}
Student(String name,int age){
this.name=name;
this.age=age;
System.out.println("父类有参");
}
public void show(){
System.out.println(name+","+age);
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age){
if(age<=0){
System.out.println("年龄错误");
}else{
this.age=age;
}
}
public int getAge() {
return age;
}
}
package Experience;
public class Teacher extends Student {
public int age=80;
Teacher(){
super();
System.out.println("子类无参");
}
Teacher(int age){
super("小华",20);
System.out.println("子类带参");
}
}