课后练习题--第四题

news/2024/7/3 12:26:21 标签: java, 多态

方法的重载与重写

任务描述 :掌握方法的重写与重载。

相关知识 为了完成本关任务,你需要掌握:
1.方法的重写(override);
2.方法的重载(overload);
3.重写与重载之间的区别。

方法的重写(override)

1.方法的重写

子类从父类中继承方法,有时,子类需要修改父类中定义的方法的实现,这称做方法的重写(method overriding)。

“重写”的概念与“重载”相似,它们均是Java“多态”的技术之一;

所谓“重载”,即是方法名称相同,但却可在不同的场合做不同的事

当一个子类继承一父类,而子类中的方法与父类中的方法的名称、参数个数和类型都完全一致时,就称子类中的这个方法重写了父类中的方法。“重写”又称为“复写”、“覆盖”。

2.如何使用重写

java">class Super {
 访问权限 方法返回值类型 方法1(参数1{
     ...
 }
}
class Sub extends Super{
 访问权限 方法返回值类型 方法1(参数1) —————>复写父类中的方法
 {
     ...
 }
}

注意:方法重写时必须遵循两个原则,否则编译器会指出程序出错。

1.重写的方法不能比被重写的方法有更严格的访问权限;

2.重写的方法不能比被重写的方法产生更多的异常。

编译器加上这两个限定,是为了与Java语言的多态性特点一致而做出的。这样限定是出于对程序健壮性的考虑,为了避免程序执行过程中产生访问权限冲突或有应该捕获而未捕获的异常产生。

方法的重载(overload)

1.方法的重载

首先回顾一下前面所讲的方法的重载,方法重载是指多个方法可以享有相同的名字,但是参数的数量或类型不能完全相同。
调用方法时,编译器根据参数的个数和类型来决定当前所使用的方法。方法重载为程序的编写带来方便,是OOP多态性的具体变现。在Java系统的类库中,对许多重要的方法进行重载,为用户使用这些方法提供了方便。

2.重载的规则

1.被重载的方法必须改变参数列表(参数个数或类型不一样);
2.被重载的方法可以改变返回类型;
3.被重载的方法可以改变访问修饰符;
4.被重载的方法可以声明新的或更广的检查异常;
5.方法能够在同一个类中或者在一个子类中被重载。
6. 无法以返回值类型作为重载函数的区分标准。

重写与重载之间的区别

方法的重写和重载是Java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载;

方法重写是在子类存在方法与父类的方法的名字相同而且参数的个数与类型一样,返回值也一样的方法,就称为方法的重写;

方法重载是一个类多态性表现,
方法重写是子类与父类的一种多态性表现。

编程要求:

1.声明一个名为Person的类,里面声明name与age两个属性,定义talk()方法返回姓名和年龄信息;

2.声明一个名为Student的类,此类继承自Person类,添加school属性,声明带三个参数的构造方法,复写talk()方法,在该方法中调用父类的talk()方法,返回姓名、年龄和学校信息;

3.实例化子类对象s,调用talk()方法打印 我是:张三,今年:18岁,我在哈佛大学上学。

测试说明
测试输入:

预期输出:
我是:张三,今年:18岁,我在哈佛大学上学

代码:

java">package case4;

public class overridingTest {
	public static void main(String[] args) {
		// 实例化子类对象s,调用talk()方法打印信息
		/********* begin *********/
    Student s=new Student("张三",18,"哈佛大学");
    s.talk();
		/********* end *********/
		
	}
}

class Person {
	/********* begin *********/
String name;
int age;
public void talk(){
    System.out.print("我是:"+name+"今年:"+age+"岁");
}
	/********* end *********/
}

class Student extends Person {
	/********* begin *********/
    String school;
    Student(String name,int age,String school){
        this.name=name;
        this.age=age;
        this.school=school;
    }
    public  void talk(){
        System.out.print("我是:"+name+","+"今年:"+age+"岁"+","+"我在"+school+"上学");
    }
	/********* end *********/
}

续上一题,嘎嘎嘎嘎嘎,小白冲鸭!!感谢大佬(* ̄︶ ̄)


http://www.niftyadmin.cn/n/1649802.html

相关文章

vue PC端项目页面做rem布局(大屏展示)

rem布局: 通常我们做移动端项目会使用rem布局,pc后台项目很少用到。会跟随当前屏幕大小自适应布局,不论在什么样的屏幕下,样式布局都保持一定的比例不变。 移动端通常使用淘宝的flexable.js 。pc端也可以使用 方法一&#xff1a…

4/25

用python删除文件和用linux命令删除文件方法 python:os.remove(文件名) linux: rm 文件名 log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54” 顺便把星期的代码也贴上…

课后练习题--第五题

抽象类 任务描述 :掌握抽象类的定义及用法。 相关知识 为了完成本关任务,你需要掌握: 1.抽象类的概念; 2.如何定义抽象类。 1.抽象类的概念 通过继承,可以从原有的类派生出新的类。原有的类称为基类或父类,…

git删除本地分支,拷贝远程分支并新建新分支名,重命名本地分支

删除本地的dev 分支: 先要切换到其他分支,然后 git branch -d dev 拷贝一份远程分支origin/master的内容到本地,并新建一个名为newBranch的分支。 (就是本地的newBranch分支就是远程上的master分支) git checkout …

BZOJ4823 [Cqoi2017]老C的方块 【最小割】

题目 老C是个程序员。 作为一个懒惰的程序员,老C经常在电脑上玩方块游戏消磨时间。游戏被限定在一个由小方格排成的R行C列网格上,如果两个小方格有公共的边,就称它们是相邻的,而且有些相邻的小方格之间的公共边比较特殊。特殊的公…

课后练习题--第六题

final关键字的理解与使用 任务描述 :理解并能正确使用final关键字。 相关知识 -为了完成本关任务,你需要掌握: 1.final关键字的使用; 2.final关键字修饰类、成员变量和成员方法。 final关键字的使用 在Java中声明类、属性和方法时…

vue监听DOM拖拽发生改变

自定义指令 v-resize <template><div class"table__body" v-resize"monResize">................................</div> </template>export default {directives:{resize: { // 指令的名称bind(el, binding) { // el为绑定的元…

课后练习题--第七题

接口 任务描述 &#xff1a;掌握接口相关的知识。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.接口的定义&#xff1b; 2.接口的实现&#xff1b; 3.接口的扩展。 1.接口的定义 接口&#xff08;interface&#xff09;是Java所提供的另一种重要技术&#…