scanner使用之后要记得关闭: scanner.close(); 2. 遍历数组时,循环条件记得使用数组长度 (int index=0;index<name.length;index++) 3. 类名使用大驼峰,数组变量使用小驼峰且用复数表达多个对象 4. 方法重载是同一个类中,定义的多个同名方法,但它们的参数列表必须不同, 方法重写是在子类中对父类的方法进行改变
- 重载:方法名相同,参数列表不同。
重写:子类重新实现父类已有的方法。 父类编译,由父类判定能调用什么方法 子类运行,由子类决定执行哪个重写版本
- 方法名相同
- 参数列表相同
- 返回类型相同或兼容
- 子类访问权限不能比父类更严格
- 建议添加
@Override重载通常是在同一个类中定义多个同名方法,要求参数数量、类型或顺序不同。重写发生在有继承关系的父子类之间,子类重新实现父类已有的方法,方法名和参数列表必须相同。重载解决“同一功能接收不同参数”的问题,重写解决“不同子类提供不同实现”的问题。
多态 左边,引用变量的声明类型,决定编译时允许调用哪些方法 右边,实际对象类型,决定运行时执行哪个重写版本 标准定义: 使用父类类型统一引用不同的子类对象,调用一个方法时,不同子类对象可以表现出不同的行为。 三个条件:
存在继承关系子类重写父类方法父类引用指向子类对象Java规定:创建子类对象前,必须先调用父类构造方法,完成父类部分的初始化。
如果子类没有写 super(...),编译器只会自动尝试添加:
super();但父类现在只有:
父类名(String name)没有 父类名(),所以会编译失败。super(name) 是为了明确调用父类现有的带参数构造方法。
2. super(name) 的位置
必须是子类构造方法中的第一条有效语句。
子类构造方法必须先调用父类构造方法。如果没有显式调用,编译器会尝试添加 super()。由于父类只有带 name 参数的构造方法,没有无参数构造方法,所以子类必须显式使用 super(name),而且它必须放在子类构造方法的第一条有效语句。创建子类对象时,父类构造方法先执行,然后执行子类构造方法。
3.
this.skill = skill;this.skill:当前对象的成员属性。- 右侧
skill:构造方法接收到的参数。 - 作用:把参数保存到当前对象中。
super(name);- 调用父类的带参数构造方法。
- 必须位于子类构造方法的第一条有效语句。
- 作用是先完成父类部分的初始化。
super.work();子类重写的 work() 中调用 super.work(),执行的是父类版本还是子类版本?它会不会创建新的父类对象?
- 调用父类版本的普通
work()方法。 - 即使子类已经重写
work(),也可以通过它保留父类原来的行为。 - 它不会创建新的父类对象。
- 例如:
@Overridepublic void work() { super.work(); System.out.println("Java开发人员编写代码");}会先执行父类内容,再执行子类新增的内容。