java中的子类是不能获得父类的构造器的
java中子类重写(也叫覆盖Overrider)父类的方法:子类继承了父类,但是父类的方法不太适合子类,所以子类可以重写父类的方法。重写遵循“两同两小一大”规则:两同就是方法名、形参列表相同,两小就是子类的返回值必须比父类的相等或者比父类的小。子类方法声明抛出的异常应该比父类的更小或者相等。一大是指子类方法的访问权限应该比父类的方法的访问权限更大。
重写还有很重要的一点:父类的方法若是static型的,子类的也必须是static型的。子类重写了父类的方法以后,若在子类中想要调用父类中的方法,可以采用super(被覆盖的是实例方法,即没有加static的方法),或采用类名.方法名(被覆盖的方法是类方法,加static的方法)来调用父类中被覆盖的方法。
super是直接父类对象的默认引用。
public class Base
{
public static void text()
{}
}
public class Derived extends Base{
//这样重写是错误的,父类的方法是static型的,
//子类的也必须一样
public void text()
{}
}
重写:若父类中的方法是private型的,那么它对子类是不可见的,也就是不能被重写。子类中定义了跟父类中方法名、参数列表一样的函数那属于定义一个新函数。
当java中创建一个类的对象时,系统会隐式创建该类的父类对象。只要有一个子类的对象存在,则一定存在一个与之对应的父类的对象。所以在子类中使用super引用时,super总是指向调用该方法的子类对象所对应的父类对象。
this和super都不能出现在static方法中原因:static修饰的方法是属于类的,该方法的调用只可能是一个类,而不是对象,那么这样就不存在对应的父类对象或当前对象了,所以使用super或this引用也就失去意义。
如果子类中没有覆盖父类中的属性,而在子类中要调用父类中的属性,则可以省略super关键字。系统会按照以下顺序查询:
1、查看当前方法中是否有定义这个属性。
2、查看当前子类中是否有定义这个属性。
3、查看这个类的父类中是否有这个属性,依次上溯,直到找到Object类,若Object中没有,那么就会报错。
java中的子类不会获得父类的构造器。使用super调用父类的构造器必须出现在第一行。当调用子类构造器来初始化子类对象时,父类构造器总会在子类构造器之前执行。执行父类构造器时,其父类的父类也会先构造,也就是说,创建任何java对象,java.lang.Object的构造器总是最先被执行的。