JavaSE_10th_super()构造方法
来源:互联网 发布:短地址生成算法 编辑:程序博客网 时间:2024/06/06 09:54
一、子类在其构造方法中必须调用其父类的构造方法。
如果不调用,子类就相当于是无源之水,无本之木,所以必须先调用父类的构造方法,再构造自己。
如果不调用,子类就相当于是无源之水,无本之木,所以必须先调用父类的构造方法,再构造自己。
class A {protected void print(String s) {System.out.println(s);}A() { print("A()"); }public void f() { print("A:f()"); }}class B extends A {B() { print("B()"); }public void f() { print("B:f()"); }public static void main(String[] args) {B b = new B();b.f();}}
运行结果:
A()B()B:f()正好印证了第一点:子类在new一个对象时,会先在构造方法中调用父类的构造方法。
二、子类可以在自己的构造方法中使用super(argument_list)调用父类的构造方法。
1)如果调用super,必须写在子类构造方法的第一行。
2)使用this(argument_list)调用本类其它的构造方法。
class Person {private String name;private String location;Person(String name) {this.name = name;location = "beijing";}Person(String name, String location) {this.name = name;this.location = location;}public String info() {return "name: " + name + " location: " + location;}}class Student extends Person {String school;Student(String name, String school) {this(name, "beijing", school);} Student(String name, String location, String school) {super(name, location);this.school = school;}public String info() {return super.info() + " school: " + school;}}public class Test {public static void main(String[] args) {Person p1 = new Person("A");Person p2 = new Person("B", "shanghai");Student s1 = new Student("C", "S1");Student s2 = new Student("C", "shanghai", "S2");System.out.println(p1.info());System.out.println(p2.info());System.out.println(s1.info());System.out.println(s2.info());}}
运行结果:
name: A location: beijingname: B location: shanghainame: C location: beijing school: S1name: C location: shanghai school: S2
正好印证了第二点:子类可以在自己的构造方法中使用super(argument_list)调用父类的构造方法,super构造方法必须是子类构造方法的第一条语句,子类构造方法可以使用this(argument_list)来调用本类其它的构造方法。
本例中的一些构造方法自动给没有传进来的参数进行了默认值的赋值,如location = "beijing";这是在new对象时还不确定location值为多少的情况下的一种暂定为、默认为"beijing"的处理。
三、如果子类的构造方法没有显式地调用父类构造方法(即未调用super(argument_list)),则系统调用父类无参数的构造方法。
class Person {String name;Person() {System.out.println("Person");}}class Student extends Person{String school;Student(String school) {this.school = school;}}如果子类Student构造方法的第一条语句缺省super,系统将自动调用父类无参的构造方法Person()。
class Person {String name;Person(String name) {this.name = name;}}class Student extends Person{String school;Student(String school) {this.school = school;}}如果是这种情况,别指望系统能够调用父类无参的构造方法。一旦构造方法被重载,并且没有重载出无参的构造方法,那么该类中就没有无参的构造方法了,此例的父类Person就是如此,因此在编译时就会报错。
0 0
- JavaSE_10th_super()构造方法
- 构造器(构造方法)
- 构造方法/构造器
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- 构造方法
- PAT甲级1018
- Dictionary数据类型在Darwin视频服务器中的使用
- JS之SELECT的VALUE作为BUTTON提交的参数
- Swift之 ? 和 !的差异
- 阿里巴巴Java开发手册个人整理精简版(二)
- JavaSE_10th_super()构造方法
- 回顾2016,展望2017,给自己定个小目标
- 程序员眼中的女人
- shiro权限框架详解03-shiro介绍
- 算法--递归与分治策略
- 队列之顺序队基本操作
- SARA-N2模块简介
- Mark一下,以提醒自己
- No manual entry for xxx 错误的解决方案