Java中的overload(方法的覆写)

方法覆写(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关键字主要有以下两个用途:

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

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

时间: 2024-10-07 05:22:36

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

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

JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系.同时,重载可以发生在同一个类中也可以发生在继承关系中. class A { } class B extends A { public void fun(String data1) { System.out.println(data1); } pub

Java中方法的覆写

所谓方法的覆写override就是子类定义了与父类中同名的方法,但是在方法覆写时必须考虑权限,即被子类覆写的方法不能拥有比父类方法更加严格的访问权限. 修饰符分别为public.protected.default.private.他们的访问权限如下图所示. 用public修饰的类在本类.同包.子类.其他包中互相访问都是可以的. 用protected修饰的类在本类.同包.子类中互相访问都是可以的,protected不可以在包外没有继承关系的类中互相访问. 就说明用default修饰的类在本类.同包

方法的覆写

方法的覆写 类和父类有相同的方法,那么类中方法的访问权限不能比父类中对应方法的访问权限严格,这就叫方法的覆写,一般称之为类覆写了父类中的某个方法 覆写方法的作用:对于一个类,向上转换后(把类的实例化对象赋值给类的父类的对象),通过该父类的对象直接访问该父类的对象的本类部分中被类所覆写的方法时,将自动访问跳转到类中对应的覆写的方法 static方法的覆写不起覆写作用,原因现阶段只能解释为Java就是这样设计的 package test1; public class Test1 { public s

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

刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数map也是互相独立的 不过很奇怪的一个 两个Action对象的hashmap是不同的但是它们的对象变量 paraterMap 的 哈希值 居然是一个 我大不解!( 找到原因以后发现这个问题其实只是一个好多年没有再提起的基础问题 ) 不过发现确实有朋友在网上说这个问题曾经引发过bug Java中的hashCode

java中构造方法和方法全面解析

java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望大家多多讨论.          构造方法和方法的区别: 构造方法要与类名相同,无返回类型,在类初始化的时候调用.      方法最好与类名不同,对象调用,静态方法可用类名.方法(). 构造器和方法在下面三个方面区别:修饰符,返回值,命名. 1.和方法一样,构造器可以有任何访问的修饰: public

Java中的native方法

博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C.这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ

review——C# (6)虚方法和覆写方法

FROM P125 在上一节中看到,当使用基类引用访问派生类对象时,得到的是基类的成员.虚方法可以使基类的引用访问"升至"派生类内. 可以使用基类引用调用派生类(derived class)的方法,只需满足下列条件: □派生类的方法和基类的方法有相同的签名和返回类型 □基类的方法使用virtual标注 □派生类的方法使用override标注 使用方法如下例: 1 class MyBaseClass //基类 2 { 3 virtual public void Print(); 4 }

浅谈Java中的hashCode方法

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到has