写点什么

详解:Java 的重写方法与示例,用 22 天总结了一份完美的 SQL 学习笔记

用户头像
极客good
关注
发布于: 刚刚

}


}


输出:


disp() method of parent class


disp() method of Child class


在上面的示例中,使用第二个对象(obj2)调用 disp()方法是运行时多态性(或动态方法分派)。


注意:在动态方法分派中,对象可以调用子类的重写方法和基类的所有非重写方法,但不能调用在子类中新声明的方法。在上述示例中,对象obj2正在调用disp()。但是,如果尝试newMethod()使用 obj2?调用该方法(已在 Demo 类中新声明),则会出现编译错误并显示以下消息:


Exception in thread "main" java.lang.Error: Unresolved compilation


problem: The method xyz() is undefined for the type ABC


Java 中的方法重写规则




  1. 参数列表:覆盖方法(子类的方法)的参数列表必须与 Overridden 方法(父类的方法)匹配。参数的数据类型及其顺序应完全匹配。

  2. 覆盖方法(子类的方法)的[访问修饰符](


)不能比父类的覆盖方法的限制更多。例如,如果父类方法的访问修饰符是公共的,则覆盖方法(子类方法)不能具有私有,受保护的默认访问修饰符,因为这三个访问修饰符都比公共更严格。


例如,这是**不允许的,**因为子类 disp 方法比基类(公共)更具限制性(受保护)


class MyBaseClass{


public void disp()


{


System.out.println("Parent c


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


lass method");


}


}


class MyChildClass extends MyBaseClass{


protected void disp(){


System.out.println("Child class method");


}


public static void main( String args[]) {


MyChildClass obj = new MyChildClass();


obj.disp();


}


}


输出:


Exception in thread "main" java.lang.Error: Unresolved compilation


problem: Cannot reduce the visibility of the inherited method from MyBaseClass


但是,这是完全有效的方案,因为公众的限制比受保护的限制要少。相同的访问修饰符也是有效的。


class MyBaseClass{


protected void disp()


{


System.out.println("Parent class method");


}


}


class MyChildClass extends MyBaseClass{


public void disp(){


System.out.println("Child class method");


}


public static void main( String args[]) {


MyChildClass obj = new MyChildClass();


obj.disp();


}


}


输出:


Child class method


  1. 私有,静态和最终方法不能被覆盖,因为它们在类中是本地的。但是可以在子类中重新声明静态方法,在这种情况下,子类方法的行为会有所不同,并且与父类的相同静态方法无关。

  2. 重写方法(子类的方法)可以引发[未经检查的异常](


),而不管被重写的方法(父类的方法)是否引发任何异常。但是,重载方法不应抛出比被重载方法声明的[异常](


)新的或更广泛的[检查异常](


)。我们将在即将到来的教程中通过示例详细讨论这一点。


  1. 覆盖的方法的绑定在运行时发生,这称为[动态绑定](


)。


  1. 如果一个类正在扩展一个[抽象类](


)或实现一个[接口,](


)则它必须重写所有抽象方法,除非该类本身是一个抽象类。


方法覆盖中的超级关键字




该[super 关键字](


)用于调用父类的方法/构造函数。super.myMethod()调用基类的 myMethod()方法,同时super()调用基类的[构造函数](


)。让我们看看在方法重写中使用 super 的方法。


众所周知,我们在子类中重写了一个方法,然后使用子类对象调用该方法将调用重写的方法。通过使用 super,我们可以调用重写的方法,如下例所示:


class ABC{


public void myMethod()


{


System.out.println("Overridden method");


}


}


class Demo extends ABC{


public void myMethod(){


//This will call the myMethod() of parent class


super.myMethod();


System.out.println("Overriding method");


}


public static void main( String args[]) {


Demo obj = new Demo();


obj.myMethod();


}


}


输出:


Class ABC: mymethod()Class Test: mymethod()如你所见,使用超级关键字,我们可以访问重写方法。

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
详解:Java的重写方法与示例,用22天总结了一份完美的SQL学习笔记