方法覆写(overload)与方法的重载非常相似,它在 Java的继承中也有很重要的应用。

写程序可能会碰到下面的情况,在父类中已经实现的方法可能不够精确,不能满足子类

的需求。例如在前面的 Animal类中,breath方法就过于简单,对于鱼类动物是用腮呼吸的,

而对于哺乳动物则是用肺呼吸的,如何实现呢,Java提供的方法覆写就是解决这方面的问题。

在下面的程序中首先定义了一个父类 Animal,然后定义 Animal的  3个子类  Tiger、Fish

和 Dog,在父类中提供了 3个方法  eat、breath、sleep,在两个子类 Tiger和   Fish中重新定义

了 breath方法,在  Dog类中什么都没做。在  OverloadDemo中,创建了一个  Fish对象、一个

Tiger对象和一个  Dog对象,分别调用  breath方法。

class Animal {
String type;
//种类 String name;
int age;
//名称
//年龄
int weight;
void eat() {
//体重
//吃饭方法
System.out.println("动物爱吃饭");
}
void breath() {
System.out.println("动物呼吸");
}
void sleep() {
//呼吸方法
//睡觉方法
System.out.println("动物在睡觉");
}
}
//Tiger类继承 Animal类
class Tiger extends Animal {
String tigerType;
//老虎种类
String from;
//定义老虎独有变量
//Tiger自己的方法
void tigerRun() {
//老虎的奔跑方法
System.out.println("老虎在奔跑");
}
void breath(){
//继承来的呼吸方法
System.out.println("老虎是用肺呼吸的");
}
}
//Fish继承 Animal类
class Fish extends Animal{
String fishType;
//Fish自己的方法
void swim(){
System.out.println("鱼在游泳");
}
void breath(){
System.out.println("鱼是用腮呼吸的");
}
}
class Dog extends Animal{
}
public class OverloadDemo
{
public static void main(String[ ] args) {
//声明三个不同的对象
Tiger tiger=new Tiger();
Fish fish=new Fish();
Dog dog=new Dog();
//都调用 breath方法
tiger.breath();
fish.breath();
dog.breath();
}
}

程序运行结果是:

老虎是用肺呼吸的

鱼是用腮呼吸的

动物呼吸

方法被覆写后如果又需要调用,可以使用 super关键字来实现,示例如下。

class Animal {
String type;
String name;
int age;
int weight;
void eat() {
System.out.println("动物爱吃饭");
}
void breath() {
System.out.println("动物呼吸");
}
}
class Tiger extends Animal {
String tigerType;
String from;
void breath()
{
//通过 super关键字调用父类的 breath方法
super.breath();
//调用动物类的呼吸方法
System.out.println("老虎是用肺呼吸的");
}
}
public class SuperDemo{
public static void main(String args[ ]){
Tiger tiger=new Tiger();
tiger.breath();
}
}

在 Animal的子类  Tiger中,在  breath方法中,使用语句  super.breath();调用父类的  breath

方法。程序的运行结果如下:

动物呼吸

老虎是用肺呼吸的

super关键字主要有以下两个用途:

在子类构造函数中调用父类构造函数。

在子类中调用父类的方法。

Java中的overload(方法的覆写)的更多相关文章

  1. JAVA中继承时方法的重载(overload)与重写/覆写(override)

    JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就 ...

  2. Java中方法的覆写

    所谓方法的覆写override就是子类定义了与父类中同名的方法,但是在方法覆写时必须考虑权限,即被子类覆写的方法不能拥有比父类方法更加严格的访问权限. 修饰符分别为public.protected.d ...

  3. JavaSE复习日记 : 继承关系和super关键字以及继承关系中方法的覆写

    /* * 类的继承和super关键字 * * 软件开发的三大目的: * 可拓展性; * 可维护性; * 可重用性; * * 这里单说下可重用性这一项: * 为了代码复用,复用方式有: * 函数的调用复 ...

  4. [改善Java代码]覆写equals方法必须覆写hashCode方法

    覆写equals方法必须覆写hashCode方法,这条规则基本上每个Javaer都知道,这也是JDK API上反复说明的,不过为什么要这样做呢?这两个方法之间有什么关系呢?本建议就来解释该问题,我们先 ...

  5. JAVA面对对象(二)——继承、方法的覆写

    1.继承就是基于已存在的类构造一个新类,继承已存在的类就能复用类的方法和属性,并且能够添加新的方法和属性.也就是子类和父类 2.一个父类可以拥有多个子类,一个子类只允许有一个父类 3.用extends ...

  6. 菜鸡的Java笔记 第二十 - java 方法的覆写

    1.方法的覆写    当子类定义了与父类中的完全一样的方法时(方法名称,参数类型以及个数,返回值类型)这样的操作就称为方法的覆写    范例:观察方法的覆写 class A{ public void ...

  7. 千万不要误用 java 中的 HashCode 方法

    刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数m ...

  8. Java中的native方法

    博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地 ...

  9. java中构造方法和方法super/this超类与子类中初始化顺序

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

随机推荐

  1. COJ 1411 Longest Consecutive Ones

    题目大意: 希望在 k 步之内,将尽可能多的1移到相邻的位置上 这里依靠前缀和解决问题 我们用pos[i]保存第i个1的位置,这里位置我以1开始 用sum[i]保存前 i 个1从 0 点移到当前位置所 ...

  2. RSA的共模攻击

    实验吧题目:http://www.shiyanbar.com/ctf/1834 参考:http://hebin.me/2017/09/07/%e8%a5%bf%e6%99%aectf-strength ...

  3. noip模拟赛 遭遇

    分析:暴力挺好打的,对于前30%的数据神搜,hi相同的数据将所有的建筑按照c从小到大排序,看最多能跳多少,ci=0的数据将所有的建筑按照h从小到大排序,枚举起点和终点,看能否跳这么多,取个max就可以 ...

  4. poj 2114 树的分治 可作模板

    /* 啊啊啊啊啊啊啊本题证明一个问题,在实际应用中sort比qsort块 还有memset这类初始化能不加尽量别加,很浪费时间 原来的程序把qsort该成sort,去掉一个无用memset就a了时间不 ...

  5. Prime Land(poj 1365)

    题意:这题题意难懂,看了题解才知道的.比如第二组sample,就是5^1*2^1=10, 求10-1即9的质因数分解,从大到小输出,即3^2.本来很简单的嘿,直接最快速幂+暴力最裸的就行了. #inc ...

  6. Power of Matrix 等比数列求和 矩阵版!

    #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu ...

  7. Ubuntu 16.04使用NASM编译时用ld链接程序出现:i386 架构于输入文件 sandbox.o 与 i386:x86-64 输出不兼容(I386 architecture in the input file sandbox.o is not compatible with i386: x86-64 output)

    错误: 问题解决过程: 1.先确定CPU的架构 2.这是以64位架构的CPU,如果使用elf参数时,默认是以32位模式去处理,那么此时需要更精确的去指定这个模式,比如elf32(32位),elf64( ...

  8. 两张图让git新手在项目中运用git命令行

    创建分支命令:    git branch (branchname) 切换分支命令:      git checkout (branchname) 当你切换分支的时候,Git 会用该分支的最后提交的快 ...

  9. Java进程堆外内存(off heap)大小

    一.使用ByteBuffer.allocateDirect分配的off heap内存大小 本机进程 在Jvisualvm中安装 Mbeans插件.然后查看java.nio/BufferPool/dir ...

  10. LeetCode241——Different Ways to Add Parentheses

    Given a string of numbers and operators, return all possible results from computing all the differen ...