Java——方法的重写(覆盖)

2.2方法的重写(覆盖)(override,orverwrite)

2.2.1 什么时候方法要进行重写?

如果父类中的方法已经无法满足当前子类的业务需求,需要将父类中的方法进行重新写一遍。就是要改变父类的行为。

注意:子类如果重写父类中的方法之后,子类对象一定调用的是重写之后的方法。

2.2.2 发生方法覆盖的条件

①发生在具有继承关系的两个类之间

②必须具有相同的方法名,相同的返回值类型,相同的参数列表.

③重写的方法不能比被重写的方法拥有更低的访问权限。

④重写的方法不能比被重写的方法抛出更宽泛的异常。(异常机制再讲。)

⑤私有的方法不能被覆盖。(多态之后讲)

⑥构造方法无法被覆盖。因为构造方法无法被继承。

⑦静态的方法不存在覆盖。(多态之后讲)

⑧覆盖指的是成员方法,和成员变量无关。

继承最基本的作用:代码重用。 继承最重要的作用:方法可以重写。

2.2.3 方法的重载与重写的区别

方法重载(Overload)的条件:

①方法名称相同

②方法参数类型、个数、顺序至少有一个不同

③方法的返回类型可以不同,因为方法重载和返回类型没有任何关系

④方法的修饰符可以不同,因为方法重载和修饰符没有任何关系

⑤方法重载只出现在同一个类中

方法覆盖(Override)的条件:

①必须要有继承关系

②覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载

③在子类中被覆盖的方法,必须和父类中的方法完全一样,也就是方法名,返回类型、参数列表,完全一样

④子类方法的访问权限不能小于父类方法的访问权限

⑤子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常

⑥父类的静态方法不能被子类覆盖

⑦父类的私有方法不能覆盖

⑧覆盖是针对成员方法,而非属性

注意:两个方法要同为static或同为非static


public class Test01{

public static void main(String[] args){

//创建子类对象

Cat c = new Cat();

//调用方法

c.move();

Animal a = new Animal();

a.move();

}

}

//父类:动物

class Animal{

//成员方法

public void move(){

System.out.println("动物在移动!");

}

}

//子类:猫

class Cat extends Animal{

//Cat的move方法应该输出:猫在走猫步!

//Animal中的move方法已经无法满足Cat了。

//所以要在Cat类中对Animal类中的move方法进行重新定义(方法的覆盖,方法的重写,Overwrite,Override)

public void move(){

System.out.println("猫在走猫步!");

}

}

原文地址:https://www.cnblogs.com/superjishere/p/11809949.html

时间: 2024-10-20 22:41:08

Java——方法的重写(覆盖)的相关文章

Java方法的重写(override)

子类通过继承了父类以后就拥有了父类一切的属性和方法,然而有些父类中的方法对于子类可能并不适用,这时子类可以通过重写父类的方法,用自身的行为替代父类的行为,方法的重写是实现多态的必要条件. 下面一个demo,演示了方法的重写: package cn.ftf.o1; /** * 重写方法(override) * @author 房廷飞 * */ public class Override { public static void main(String[] args) { Horse h = new

java方法的重写与重载

方法重写规则: 参数列表和返回值类型必须与被重写的方法相同 访问权限不能比父类中被重写的方法的访问权限更低.例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected 父类的成员方法只能被它的子类重写 声明为final的方法不能被重写 静态方法也能被继承. 但是, 静态方法不能被覆盖. 如果父类中 定义的静态方法在子类中被重新定义, 那么在父类中定义的静态方法将被隐藏. 可 以使用语法: 父类名 .静态方法名(SuperClassName. staticM

Java类的设计----方法的重写、覆盖

方法的重写.覆盖 在子类中可以根据需要对从父类中继承来的方法进行改造-覆盖方法(方法的重置.重写),在程序执行时,子类的方法将覆盖父类的方法. 覆盖方法必须和被覆盖方法具有相同的方法名称.参数列表和返回值类型. 覆盖方法不能使用比被覆盖方法更严格的访问权限. 覆盖方法举例(1) public class Person { public String name; public int age; public String getInfo() { return "Name: "+ name

java方法重写返回值类型

重写(Overriding)(1) 父类与子类之间的多态性,对父类的函数进行重新定义.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法.但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写.方法重写又称方法覆盖.(2)若子类中的方法与父类中的某一方法具有相同的方法名.返回类型和参数表,则新方法将覆盖原有的方法.如需父类中原有的方法,可使用super关键字

学习日记(九)java方法重载和重写

方法的重载:在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一. 参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类型不同,方法重载时返回值类型可以不同,但是仅仅是返回值类型不同的话不可以. java在调用方法的时候,如果精确匹配没有对应的方法,会自动转换匹配相应的方法,例如,如果没有int类型的参数,但是有一个double类型的参数的同名方法,在调用该方法时如果传入int类型的参数,则不会报错,而是把int自动转

java 方法重载与重写的归纳

方法重载:Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同.调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法 示例代码: public class Test { //无返回值有有int形的参数 void receive(int i) {System.out.println("i="+i);} //无返回值,有float形的参数 void receive(float f) {Sys

java中重载和覆盖(又称重写)的区别

初次见到这两个单词并没有什么特别的感觉,但是时间长了,却发现书上一会儿用override,一会儿又用overload,搞得我的迷迷糊.于是就做了个总结,希望能对和我一样对这两个概念模糊不清的网友有一个帮助. override 可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用.对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法.除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方

JAVA方法的重载(overload)和覆盖(override)

方法的重载(overload)和覆盖(override) 有的时候,类的同一种功能有多种实现方式,到底采用哪种实现方式,取决于调用者给定的参数.例如我们最常用的System.out.println()能够打印出任何数据类型的数据,它有多种实现方式.运行时,Java虚拟机先判断给定参数的类型,然后决定执行哪个println()方法. 重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同,参数列表不同的方法之间就构成了重载关系.这里有两个问题需要注意: (1)       什

Java方法重写与方法重载

继承和多态都是面向对象程序设计的特点.使用继承可以在一个父类的基础上再创建一个子类,这个子类不但拥有父类已有的属性和方法,还可以创建属于自己的属性和方法.由于子类和父类之间的关系,从而引出了方法重写和方法重载的问题.方法重写及方法重载在继承和多态性方面的应用中会存在很多问题,这些概念很容易混淆,掌握重写和重载的区别对学会使用多态的方式编写程序.提高程序的可维护性奠定了基础.一.方法重写(0veriding)如何定义重写:在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所