5.4.1 成员变量的隐藏
子类隐藏成员变量的特点:
(1)子类对象、子类自己定义的方法操作与父类同名的成员变量,是指子类自己声明的这个成员变量
(2)子类对象仍然可以调用从父类继承的方法,来操作被子类隐藏的父类成员变量(即,继承方法操作的成员变量,一定是子类继承父类或者隐藏了的父类成员变量)
//例子1:
public class Example5_3_One {
int a = 1;
int b ;
}
public class Example5_3_Two extends Example5_3_One {
int sum;
// int a=10;
public int youAre(int s) {
sum = s +a ;
return sum;
}
}
public class Example5_3 {
public static void main(String[] args) {
Example5_3_Two two = new Example5_3_Two();
int i = 10;
int jj = two.youAre(i);
System.out.println(jj);
}
}
//调用了父类的a,输出结果为11
//例子2:
public class Example5_3_One {
int a = 1;
int b ;
}
public class Example5_3_Two extends Example5_3_One {
int sum;
int a=10;
public int youAre(int s) {
sum = s +a ;
return sum;
}
}
public class Example5_3 {
public static void main(String[] args) {
Example5_3_Two two = new Example5_3_Two();
int i = 10;
int jj = two.youAre(i);
System.out.println(jj);
}
}
//子类声明的a与父类同名,隐藏了父类的a,调用了子类a,输出结果为20
注意:
(1)子类继承的方法只能操作子类继承和隐藏的成员变量
(2)子类新定义的方法可以操作子类继承和子类新声明的成员变量,但是无法操作子类隐藏的成员变量。
(3)隐藏的成员变量可以使用关键字super操作
5.4.2 方法重写
子类通过重写可以隐藏已经继承的方法(也称方法覆盖)
1.重写规则:
(1)该方法是子类继承父类而来
(2)子类定义一个方法,方法的类型(或者父类方法的子类型)、名字、参数个数、参数类型和父类完全相同
(3)重写父类方法时不允许降低方法的访问权限,但是可以提高访问权限(从高到低:public-protected-友好的-private)
*注意:1.所谓子类型是,如果父类方法的类型是“类”,那么允许子类的重写方法类型是“子类”;2.子类如此定义的方法称作子类重写的方法,不属于新增方法
2.重写目的
(1)通过重写隐藏已继承的方法
(2)通过重写将父类的状态和行为改变为自身的状态和行为
(3)重写方法可以操作子类继承和子类新声明的成员变量、方法,但是无法操作子类隐藏的成员变量。隐藏的成员变量可以使用关键字super操作
//重写例子:
public class Example5_4_One {
protected int a1 = 10;
protected int b1 = 10;
public int add(int a, int b) {
return a + b;
}
}
public class Example5_4_Two extends Example5_4_One {
protected int a1 = 5;
protected int b1 = 5;
public int add(int a, int b) {
return a * b + a1 + b1;
}
}
public class Example5_4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Example5_4_Two two = new Example5_4_Two();
int sum = two.add(5, 5);
System.out.println(sum);
}
}
//重写了父类方法,输出结果为35,父类的a1、b1被隐藏了