上一次说到了Java中的继承,当然了,有些父类中的成员变量和方法就不能被子类继承,这是父类的成员变量和方法的访问权限的问题。
虽然子类继承父类之后,可以将父类中的成员变量和方法当作像是自己定义的一样,直接拿来进行操作,但由于存在访问权限的问题,所以并不是所有的变量和方法都可以随意拿来用。
当子类和父类在同一个包中时,子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法,且继承的成员变量或方法的访问权限保持不变。说明白点就是,子类只能继承父类中的public、protected以及友好访问权限的成员变量或方法,并且继承之后,这些成员变量或方法的访问权限和之前的一样,如父类中是public,继承后还是public。这个应该很好理解,private作为访问权限的最低级(访问权限从高到低的排列顺序是:public、protected、友好的、private),定义的成员变量或方法只能被自己使用,不能被其他类使用。
例如:
A.java
public class A {
intx = 5, y = 8;
String name;
public void doMath(){
System.out.print(name+ "会做数学题,");
}
protected void getResult(){
System.out.print("其计算的结果为:");
}
}
B.java
public class B extends A{
intadd(){
return(x+y);
}
}
Test.java
public class Test {
public static void main(String[] args){
B b =new B();
b.name= "小明"; //访问继承的成员变量
b.doMath(); //调用继承的public的方法
b.getResult(); //调用继承的protected的方法
intresult = b.add();
System.out.println("x+ y =" + result);
}
}
但是,当子类和父类不在同一个包中,父类中的private和友好访问权限的成员变量不会被子类继承,那也就是说,此时子类只继承父类中的public和protected访问权限的成员变量作为子类自己的成员变量;同样的,子类也只继承父类中的public和protected访问权限的方法作为子类自己的方法。