java基础:在子类的构造函数中为什么必须调用父类的构造函数(与转型)

假设有两个类:
Person:父类,成员变量:name,age
Student:子类,继承Person,则它的成员变量name,age,假设再新增一个成员变量address

那么当Student写构造函数时:

public Student(String name,int age,String address){
    this.name = name;
    this.age = age;
    this.address =address;
}

当看到这段代码时,我们可以想到,name和age的赋值跟Person父类构造函数里面的name、age赋值是重复的,有重复代码,所以为了减少重复代码,java采用super关键字调用父类的构造函数来减少重复代码。(子类无法继承父类的构造函数,可以继承成员变量和方法)

super()为什么要放在构造函数第一行呢,不放在第一行编译会报错, 试想如果不放在第一行,那么我成员变量都没初始化,就对成员变量进行操作是不是会产生异常呢,如NullPointerException等等

//*****************
向上转型:
1.一个引用能够调用哪些成员(变量和方法),取决于这个引用的类型究竟是怎么定义的。
Student s = new Student();
Person p = s;
如果Person有一个方法introduce()
Student有两个方法study()和重写(override)的introduce()
则p只能调用introduce方法不能调用study方法.

2.一个引用调用的是哪一个方法,取决于这个引用所指向的对象。
同上例子,则p调用introduce方法,会调用Student的introduce。

3.总结: Person p = new Student();
p能够调用哪些成员看左边的类型——p实际调用的哪个方法看右边的实际对象。

向下转型
前提:必须先把一个对象向上转型才能进行向下转型给转回来,如:
Person p = new Student();
Student s = (Student)p;
上述转型是正确的
而:
Person p = new Person();
Student s = (Student)p;
这种做法是错误的。(理解:比如一个学生,你说他是人这是没问题的,但是如果一个人你说他是学生那就不一定了,所以上述那种转型做法是不正确的)

全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
03-10 11:23
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务