java会继承父类中default权限以上的成员
父类的private成员不会被子类继承,子类不能访问。但是子类对象的确包含父类的私有成员。
父类的 包访问成员 继承为子类的包访问成员。就好像他们直接定义在子类中一样。
父类的 protected 成员继承为子类的protected 成员。就好像他们直接定义在子类中一样。
父类的 public 成员继承为子类的public 成员,就好像他们直接定义在子类中一样。
构造函数是不能被继承的,但是在子类中一定可以(也必须)借用父类的构造函数
java保证:除了Object类对象,每一个类的实例在构造时,先去调用父类的构造函数。
我们自定义类的构造函数的第一句一定是super(xx,…),如果不是,那么第一句就一定是this(xx,…)去调用本类的另一个构造函数。
如果子类构造函数不显式的调用super(),那么,javac会自动插入super(),也就是父类无参数的构造函数。
对于构造函数,其实类中所有构造函数都是隐式static的。很明显的例证就是 构造函数無需通過实例就可以调用。
对于Protected的权限理解
But a subclass in another package can access the protected members in the super-class via only the references of subclass or its subclasses. A subclass in the same package doesn’t have this restriction. This ensures that classes from other packages are accessing only the members that are part of their inheritance hierarchy.
例如:
在不是一个包的情况之下:
子类的引用在子类中可以调用父类的Protected方法或属性,非子类的话只能调用public方法或属性
package test2;
public class Base {
protected int protectedInt;
public int publicInt;
int defaultInt;
protected static int pstaticInt = 2;
void differDefPackage(){
System.out.println("Default Method");
}
protected void differProPackage(){
System.out.println("protected Method");
}
}
package test1;
class TestNotSub{
public void test(){
Base b = new Base();
b.publicInt = 3;
Test t = new Test();
// t.defaultInt = 3; 不可见
//t.protectedInt = 3; 不可见
//t.defaultInt = 2; 不可见
//t.differProPackage();不可见
//t.differDefPackage();不可见
}
}
public class Test extends Base {
public void test(){
Test t = new Test();
t.protectedInt = 3;
//t.defaultInt = 2; 不可见
t.differProPackage();
//t.differDefPackage();不可见
}
}