重写

重写是子类对父类允许访问的方法实现过程进行重新编写,返回值和参数都不能变。

重写方法不能抛出新的检查异常和比被重写方法更加宽泛的异常

访问权限不能比被重写方法低

声明为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-重写与重载的更多相关文章

  1. Java学习笔记17---方法的重载与重写

    重载是指,一个类中定义了一个成员方法后,通过修改参数个数.参数类型或参数顺序,重新实现该方法,则这两个方法互为对方的重载方法. 重写是指,子类重新实现父类的成员方法. 重载后的方法,与原方法相比: ( ...

  2. Java学习笔记-13.创建窗口和程序片

    1.init()方法:程序片第一次被创建,初次运行初始化程序片时调用. start()方法:每当程序片进入web浏览器中,并且允许程序片启动他的常规操作时调用(特殊的程序片被stop()关闭):同样在 ...

  3. 1.3(java学习笔记)构造方法及重载

    构造方法,用于对象的初始化,在创建对象时被自动调用的特殊方法.构造方法名称与类名一致,通过new调用. 下面通过代码来详细讲解 public class Point { int x, y; publi ...

  4. C++学习笔记13:运算符重载(赋值操作符2)

    移动语义 完成所有权的移交,当拷贝构造和赋值构造时,目标对象的所有权必须移交给我们的新的对象,原始对象将丧失所有权,_p指针将不再指向原来的那个数组: 左值与右值 C原始定义 左值:可以出现在赋值号的 ...

  5. java学习笔记(13) —— google GSON 实现json转化方法

    1.配置struts.xml <action name="getGsonAction" class="com.test.action.json.GetGsonAct ...

  6. Java学习笔记13(面向对象六:super)

    在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句 注意:父类构造方法第一行也有隐式的super(); 所有类都有一个"祖宗类" ...

  7. Java学习笔记13(equals()方法;toString()方法)

    equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

随机推荐

  1. (二)MVC项目+c3p0连接池

    一.项目架构 注:删除了原有的数据库工具,添加了c3p0数据库工具类,添加了c3p0的配置文件,修改了Dao类以及servlet类 二.修改或添加的类 1.C3p0Helper(暂时不了解事务回滚之类 ...

  2. easyui中 datagrid与pagination结合使用【记录】

    /** * Js名称:客源基本管理 * */ var setPageNumber = 1; var setPageSize = 10; var guestManageListData = {}; // ...

  3. Django后台缓存运用,提高并发

    图片防盗链 -通过请求头refer控制 -nginx处理 提高网站并发的通用方法 QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准.衡量一个服务器能抗多大并发的重要 ...

  4. yml 文件中使用环境变量

    Spring Boot 中可以用 spring.profiles.active 参数来指定系统环境,让系统加载不同的配置文件. 可以在程序启动的时候加上参数来指定需要的配置 java -Dspring ...

  5. 深入理解linux内核-内存寻址

    逻辑地址:由一个段和偏移量组成的地址线性地址(虚拟地址):物理地址:CPU的物理地址线相对应的地址32或36位 多处理器系统中每个CPU对应一个GDT 局部线程存储:用于线程内部的各个函数调用都能访问 ...

  6. ASP.NET请求过程-Handler

    什么事Handler asp.net程序所有的请求都是handler处理的.以前的webform我们访问的地址是xxxxx.aspx地址,其实他也会到一个handler(我们写的业务代码都在handl ...

  7. superset的安装(win10)踩踩坑!AWSL

    基本安装参考https://www.jianshu.com/p/8b27ff71429f 按此方案装的时候会遇到各种flask版本不兼容的问题,所以 第一步:装好anaconda 第二部:保证好高于V ...

  8. mycat入门安装及demo实现

    下载: https://github.com/MyCATApache/Mycat-download 安装: 直接解压 运行命令: linux:    ./mycat start 启动   ./myca ...

  9. C++Primer 5th Chap8 The IO Library

    IO类: 头文件 类型 iostream istream,从流读取数据 ostream,向流写入数据 iostream,读写流 fstream ifstream,从文件读取数据,默认in模式打开 of ...

  10. PAT(B)1003 我要通过!(Java)

    1003 我要通过! 题目   判断字符串是否符合给定的规则.更多内容点击标题. 参考博客 ValarMorghulis的博客 分析   规律:num_a * num_b = num_c.字符串a中字 ...