Java的访问权限与继承

  • 访问权限
  • 继承
  • 子类与对象


访问权限

Java中有私有变量和私有方法、共有变量和共有方法、友好变量和友好方法、受保护的成员变量和方法。
类中的某个方法或变量被定义为私有的话,在另外的类中无法访问该私有变量和私有方法。共有(public)变量或方法可被任何类访问。不用private,public,protected修饰的称为友好变量或方法。在同一个包中的其他类可以访问类中的友好变量或方法。(注:使用import引入的另外包中的类也不能访问类中的友好变量或方法)。对于受保护的方法或变量,在同一个包中的其他类可以访问。
访问权限从高到低的排列顺序是:public、protected、友好的、私有。

继承

对于public和protected,子类完全继承。
一个类A的protected成员变量和方法可以被它的子孙类继承,比如B是A的子类,C是B的子类,D又是B的子类,那么B、C、D类都继承A类的protected成员变量和方法。如果用D类在D中创建了一个对象,那么该对象总可以通过“.”运算符访问继承的或自定义的protected变量和方法。但是, 在另外一个类,比如在other类中用D类创建一个对象object,则有:

1. other类与D类在同一个包中,object对象可以访问D类的protected成员变量和方法。
 2.  对于D从父类继承protected成员或方法,则需要追溯到方法或变量所在的“祖先”类,比如可能是A类,只要other类与A类在同一个包中object对象则能访问。

不在一个包内的子类和父类,子类不继承父类的友好成员变量。

子类与对象

当用子类的构造方法创建一个子类的对象时,不仅子类中声明的成员变量被分配了内存,父类的成员变量也都分配了内存空间,但只将子类继承的那部分成员变量作为分配给子类对象的变量。
注:尽管子类创建对象时,似乎浪费了一些内存,因为当子类创建对象时,父类的成员变量也都分配了内存空间,但只将其中一部分作为分配给子类的对象的变量,没分配给子类的变量也不是某个父类的某个对象的变量,因为根本就没有用父类创建对象。但实际情况并非如此,因为子类继承的某些方法或许可以操作那部分未被继承的变量。