java学习笔记13-重写与重载
重写
重写是子类对父类允许访问的方法实现过程进行重新编写,返回值和参数都不能变。
重写方法不能抛出新的检查异常和比被重写方法更加宽泛的异常
访问权限不能比被重写方法低
声明为final的方法不能被重写
声明为static的方法不能被重写
子类和父类在同一个包中,子类可以重写父类除了声明为private和final的方法。不在同一个包中,子类只能重写父类声明为public和protected的非final方法
构造方法不能被重写
不是继承的方法,无法重写
在上一篇文章的代码进行改动,在FootBallPalyer和BasketBallPlayer中新增playBall()
public class Player {
public int number; //号码
public int score; //得分
public String position; //司职
public String name; //姓名
public Player(){
System.out.println("我是Player");
}
public void playBall(){
System.out.println("姓名:"+this.name);
System.out.println("号码:"+this.number);
System.out.println("得分:"+this.score);
System.out.println("司职:"+this.position);
}
}
public class FootBallPlayer extends Player {
public FootBallPlayer(){
System.out.println("我是FootBallPlayer");
}
public void playBall(){
System.out.println("我是一名足球运动员,我的名字叫"+this.name+",娱乐不能考手");
}
public static void main(String[] args){
FootBallPlayer player2 = new FootBallPlayer();
player2.name = "齐达内";
player2.number = 10;
player2.position = "中场";
player2.score = 2;
player2.playBall();
}
}

public class BasketBallPlayer extends Player{
public BasketBallPlayer(){
System.out.println("我是BasketBallPlayer");
}
public void playBall(){
System.out.println("我是一名篮球运动员,我叫"+this.name+",我从来不上脚");
}
public static void main(String[] args){
BasketBallPlayer player1 = new BasketBallPlayer();
player1.name = "jordan";
player1.number = 23;
player1.position = "得分后卫";
player1.score = 33;
player1.playBall();
}
}

可以看到父类和子类都有相同返回和参数的playBall()方法,在调用时,调用了子类自己的playBall()方法。
重载
重载是在同一个类中,方法名字相同,而参数不同。返回类型也可以不同
每一个重载方法必须有一个独一无二的参数类型列表
重载方法必须改变参数列表,参数的个数或参数的类型
被重载方法可以改变返回类型,改变访问修饰符。可以声明新的更广的检查异常。
方法能够在同一个类中,或者子类中被重载
不能以返回类型来区别调用哪个方法
在Player类中新建带一个string参数的构造方法。在FootBallPlayer类和BasketBallPlayer类中使用super关键字调用父类的方法
public class Player {
public int number; //号码
public int score; //得分
public String position; //司职
public String name; //姓名
public Player(){
System.out.println("我是Player");
}
public Player(String club){
System.out.println("俱乐部名称:"+club);
}
public void playBall(){
System.out.println("姓名:"+this.name);
System.out.println("号码:"+this.number);
System.out.println("得分:"+this.score);
System.out.println("司职:"+this.position);
}
}

public class BasketBallPlayer extends Player{
public BasketBallPlayer(){
super("篮球俱乐部");
System.out.println("我是BasketBallPlayer");
}
public void playBall(){
System.out.println("我是一名篮球运动员,我叫"+this.name+",我从来不上脚");
}
public static void main(String[] args){
BasketBallPlayer player1 = new BasketBallPlayer();
player1.name = "jordan";
player1.number = 23;
player1.position = "得分后卫";
player1.score = 33;
player1.playBall();
}
}

可以看到,调用的是对应带str参数的构造方法。
super关键字
super关键字是用来在子类中调用父类方法的关键字
当调用父类的构造方法时,super关键字需要在第一个行,可以看上面的例子,把super换到打印语句下面去。会有编译错误的提示
当调用的不是构造方法时,位置就随意了,在BasketBallPlayer类中添加helloPlayer()方法并调用
public class BasketBallPlayer extends Player{
public BasketBallPlayer(){
super("篮球俱乐部");
System.out.println("我是BasketBallPlayer");
}
public void playBall(){
System.out.println("我是一名篮球运动员,我叫"+this.name+",我从来不上脚");
}
public void helloPlayer(){
System.out.println("Hello"+this.name);
super.playBall();
System.out.println("你好"+this.name);
}
public static void main(String[] args){
BasketBallPlayer player1 = new BasketBallPlayer();
player1.name = "jordan";
player1.number = 23;
player1.position = "得分后卫";
player1.score = 33;
player1.helloPlayer();
player1.playBall();
}
}

可以看到调用了父类的playBall()方法
java学习笔记13-重写与重载的更多相关文章
- Java学习笔记17---方法的重载与重写
重载是指,一个类中定义了一个成员方法后,通过修改参数个数.参数类型或参数顺序,重新实现该方法,则这两个方法互为对方的重载方法. 重写是指,子类重新实现父类的成员方法. 重载后的方法,与原方法相比: ( ...
- Java学习笔记-13.创建窗口和程序片
1.init()方法:程序片第一次被创建,初次运行初始化程序片时调用. start()方法:每当程序片进入web浏览器中,并且允许程序片启动他的常规操作时调用(特殊的程序片被stop()关闭):同样在 ...
- 1.3(java学习笔记)构造方法及重载
构造方法,用于对象的初始化,在创建对象时被自动调用的特殊方法.构造方法名称与类名一致,通过new调用. 下面通过代码来详细讲解 public class Point { int x, y; publi ...
- C++学习笔记13:运算符重载(赋值操作符2)
移动语义 完成所有权的移交,当拷贝构造和赋值构造时,目标对象的所有权必须移交给我们的新的对象,原始对象将丧失所有权,_p指针将不再指向原来的那个数组: 左值与右值 C原始定义 左值:可以出现在赋值号的 ...
- java学习笔记(13) —— google GSON 实现json转化方法
1.配置struts.xml <action name="getGsonAction" class="com.test.action.json.GetGsonAct ...
- Java学习笔记13(面向对象六:super)
在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句 注意:父类构造方法第一行也有隐式的super(); 所有类都有一个"祖宗类" ...
- Java学习笔记13(equals()方法;toString()方法)
equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
随机推荐
- 这一次,真正掌握composer
思维导图 composer是现代PHP的基石 现代高级编程语言,依赖管理工具是必不可少的.Java有Maven,Python有pip,Nodejs有npm, 而在composer出现之前,PHP只 ...
- 论文笔记: LSTD A Low-Shot Transfer Detector for Object Detection
背景知识: Zeroshot Learning,零次学习. 模型 对于 训练集 中 没有出现过 的 类别,能自动创造出相应的映射: X→Y. Low/Few-shot Learning.One-sho ...
- OWASP TOP 10(OWASP十大应用安全风险)
TOP1-注入 当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种 ...
- F2812 DSP程序运行在片内RAM和FLASH的区别
F2812 DSP程序运行在片内RAM和片内FLASH的区别 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:F2812是带有内部Flash的DSP,与 ...
- 最新 吉比特java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.吉比特等10家互联网公司的校招Offer,因为某些自身原因最终选择了吉比特.6.7月主要是做系统复习.项目复盘.LeetCo ...
- Nginx基本使用方法
原帖:http://zyjustin9.iteye.com/blog/2017394 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人 ...
- tomcat性能优化参数
线上环境使用默认tomcat配置文件,性能很一般,为了满足大量用户的访问,需要对tomcat进行参数性能优化,具体优化的地方如下: Linux内核的优化 服务器资源JVM 配置的优化 Tomcat参数 ...
- Asp.Net Core 客户端验证和远程验证
我们先来看这样一个注册页面和它的后台Model @model RegisterViewModel @{ ViewBag.Title = "用户注册"; } <h1>用户 ...
- Docker准备
1. 引言 Docker是目前最流行的容器技术,是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台.也许我们 ...
- Spring Boot系列教程十:Spring boot集成MyBatis
一.创建项目 项目名称为 "springboot_mybatis_demo",创建过程中勾选 "Web","MyBatis" ...