子类构造器的特点:
- 所有的子类在构造时必须,一定会调用父类的构造方法,若没有显式地调用父类构造方法,那么系统默认调用父类的无参数构造方法。
- 子类使用super(argument_list)来调用对应的父类构造方法。并且super一定要出现在方法的首行,其次还可以调用this调用本子类的其他构造方法。
- 子类如果没有显式地调用父类构造方法,并且父类中无无参数的构造方法(此情况出现在:为父类显式添加含参的构造方法后,系统就不会自动给父类添加无参的构造方法),那么就出现编译错误。所以,为了可拓展性和提前避免错误,应该给每个类显式构造无参的构造方法。
构造链
定义:子类构造器在进行自己的构造任务前,会调用它的基类的构造方法。这个过程持续到继承体系结构的最后一个构造方法被调用为止。
Super
关键字super不仅可以引用父类的构造方法,还可以引用父类的方法。
重写和重载
重写:在子类中使用和父类中的一样的签名(同参同权)以及一样的返回值来定义方法。
- 子类中重写方法的原因是因为:子类需要不同于父类的实现,并且可以在多态过程中通过对子类对象 向上转型 实现动态绑定。(向上转型可以隐式完成,向下转型必须保证父类指向的对象确实是子类的实例,并且使用显式强转)
- 当且仅当实例方法是可以被访问,才可以重写覆盖父类方法,由于私有方法不能被继承,所以所谓的“重写”的方法和父类方法没有任何关系。
- 相同于实例方法,静态方法也可以被重写,只是不能被覆盖,而是隐藏,可以通过父类名.方法名来访问。
- @Override 作为重写标注
重载: 使用相同的名字不同的签名来定义多个方法,意味着在子类或者当前类中改变一个方法的需接口。
- 重载可以发生在具有继承关系的子类中,也可以发生在没有单独一个类中。
- 重载是具有相同的方法名,不同的参数个数,或者不同类型,返回值可以相同也可以不同,也即是不可以根据返回值类型判断是否重载了,只能根据参数的类型,数量,排列位置判断。
抽象类的继承
凡是含有抽象方法的,类被申明为abstract的都是抽象类
- 抽象方法不能包含在非抽象类中,若继承的子类不能实现全部的抽象方法,那么必须被申明为抽象类。
- 抽象类不能用new来实例化,那么它的构造方法意义何在?在于被,抽象的子类实例化时调用(所有的类实例化都会调用父类的构造方法),因此最好将抽象类的构造方法申明为protected。
- 子类可以在父类是具体类的情况下被申明为抽象类,例如Object是具体类,但是有从它继承而来的抽象子类。同样,子类可以抽象化具体的父类方法,此种情况出现在:父类的具体方法在子类中并不具有很好的意义或者无效,此时将子类中的方法申明abstract。
- 抽象类不可以被实例化,但是可以作为数据类型的引用,实现对子类方法的动态绑定。
网友评论