1 class Super{ 2 public Super(){ 3 System.out.PRintln("我是父类super"); 4 } 5 } 6 class Sub extends Super{ 7 public Sub(){ 8 System.out.println("我是子类sub"); 9 }10 }11 public class InstanceDemo {12 public static void main(String[] args) {13 new Sub();14 /**15 * 我是父类super16 * 我是子类sub17 *18 * 先打印的是父类里面的在打印的子类里面19 * 从这个可以看出是先调用父类的构造方法创建父类对象再来调用子类里面的构造方法20 *21 */22 }23 }子类对象在初始化之前会默认调用父类无参的构造方法,但是一旦子类显示的调用了父类其他的构造方法,那么默认调用的构造方法将会被取消方法的重写(Override): 当父类的某个方法不适合于子类本身的特征行为时就当重写父类中应当改变的方法方法重写应遵循的原则: 方法签名(方法名+参数列表)必须相同 子类方法的返回值类型比父类方法的返回值类型更小或相等 子类方法声明抛出的异常应比父类方法申明跑出异常更小或相等,即子类方法不能抛出新的异常类型,子类方法可以同时声明抛出多个父类方法声明抛出异常的子类(RuntimeException例外) 子类方法的访问权限应比父类方法更大或相等overload 与 override
区别点 | 重载(overload) | 重写(override) | |
1 | 判断规则 | 参数列表顺序不同、类型不同、个数不同都可以构成重载 同类中方法名相同,但是方法的参数列表不同,与方法的返回值类型和修饰符无关 | 方法签名(方法名+参数列表)必须相同 子类方法的返回值类型比父类方法的返回值类型更小或相等 子类方法声明抛出的异常应比父类方法申明跑出异常更小或相等 子类方法的访问权限应比父类方法更大或相等 |
2 | 权限 | 无权限要求 | 被重写的方法不能拥有比父类更严格的权限 |
3 | 范围 | 发生在一个类中 | 发生在继承关系中 |
4 | 多态 | 编译时多态 | 运行时多态 |
区 别 | this | super | |
1 | 使 用 | 调用本类中的字段或方法 | 从子类调用调用父类的字段或方法 |
2 | 构 造 | 可以调用本类中的构造方法,且有一个构造方法要作为出口 | 从子类调用父类的构造方法,不管子类如何安排最终一定会去调用,默认调用的父类中无参的构造方法 |
3 | 要 求 | 调用自身构造方法时放在构造方法首行 | 调用父类构造方法时放在子类构造方法首行 |
4 | 特 殊 | 表示当前对象 | 表示父类对象 |
新闻热点
疑难解答