在Java编程中,什么时候该使用覆盖函数操作呢,很多人都知道有覆盖操作,但是到底什么时候该使用覆盖操作,还是有一些模糊的感觉,以下就举例来用代码分析就明白了, 举例生活中的案例,模拟制造手机的公司;


公司最早生产的第一台手机 01版本,只具备显示电话号码功能

package com.oop;

/**
* Java什么时候该使用覆盖操作
* @author Liudeli
*
*/ /**
* 公司最早生产的第一台手机 01版本,只具备显示电话号码功能
* @author Liudeli
*
*/
class Phone01 { /**
* 拨打电话操作(显示电话号码)
*/
public void call() {
System.out.println("电话号码:13887986585");
}
} /**
* 测试端程序
* @author Liudeli
*
*/
public class Demo5 { /**
* 测试程序
* @param args
*/
public static void main(String[] args) {
// 拿到一台手机
Phone01 phone1 = new Phone01();
// 操作手机
phone1.call();
} }

运行结果:



由于公司研发的不断努力,推出了Phone02升级版本,此版本具备显示姓名,电话号码功能;

package com.oop;

/**
* Java什么时候该使用覆盖操作
* @author Liudeli
*
*/ /**
* 公司最早生产的第一台手机 01版本,只具备显示电话号码功能
* @author Liudeli
*
*/
class Phone01 { /**
* 拨打电话操作(显示电话号码)
*/
public void call() {
System.out.println("电话号码:13887986585");
}
} /**
* 推出了Phone02升级版本,此版本具备显示姓名,电话号码功能
* @author Liudeli
*
*/
class Phone02 extends Phone01 { // 为什么要继承Phone01呢,因为Phone02是在Phone01的基础上研发出来的 /**
* 拨打电话操作(显示电话号码,显示姓名)
*/
public void call() {
System.out.println("姓名:刘德刘,电话号码:13887986585");
} } /**
* 测试端程序
* @author Liudeli
*
*/
public class Demo5 { /**
* 测试程序
* @param args
*/
public static void main(String[] args) {
// 拿到一台手机
Phone01 phone = new Phone02();
// 操作手机
phone.call();
} }

运行结果:



由于公司研发人员的不断加班加点,在年尾期间,推出了Phone10升级版本,此版本具备显示姓名,电话号码,显示大头贴功能;

package com.oop;

/**
* Java什么时候该使用覆盖操作
* @author Liudeli
*
*/ /**
* 公司最早生产的第一台手机 01版本,只具备显示电话号码功能
* @author Liudeli
*
*/
class Phone01 { /**
* 拨打电话操作(显示电话号码)
*/
public void call() {
System.out.println("电话号码:13887986585");
}
} /**
* 推出了Phone02升级版本,此版本具备显示姓名,电话号码功能
* @author Liudeli
*
*/
class Phone02 extends Phone01 { // 为什么要继承Phone01呢,因为Phone02是在Phone01的基础上研发出来的 /**
* 拨打电话操作(显示电话号码,显示姓名)
*/
public void call() {
System.out.println("姓名:刘德刘,电话号码:13887986585");
} } /**
* 推出了Phone10升级版本,此版本具备显示姓名,电话号码,大头贴显示功能
* @author Liudeli
*
*/
class Phone10 extends Phone02 { // 为什么要继承Phone02呢,因为Phone10是在Phone02的基础上研发出来的 /**
* 拨打电话操作(显示电话号码,显示姓名,显示大头贴)
*/
public void call() {
System.out.println("姓名:刘德刘,电话号码:13887986585,显示了帅气的大头贴照片...");
} } /**
* 测试端程序
* @author Liudeli
*
*/
public class Demo5 { /**
* 测试程序
* @param args
*/
public static void main(String[] args) {
// 拿到一台手机
Phone01 phone = new Phone10();
// 操作手机
phone.call();
} }

运行结果:


谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,

刘德利CSDN博客, http://blog.csdn.net/u011967006

Java何时该使用覆盖?的更多相关文章

  1. c#和java中的方法覆盖——virtual、override、new

    多态和覆盖 多态是面向对象编程中最为重要的概念之一,而覆盖又是体现多态最重要的方面.对于像c#和java这样的面向对象编程的语言来说,实现了在编译时只检查接口是否具备,而不需关心最终的实现,即最终的实 ...

  2. JAVA - 请说明”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

    请说明"static"关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? "static"关键字表明一个成 ...

  3. C++中的重载隐藏覆盖&&JAVA中的重载覆盖&&多态

    class 类继承默认是private, struct 默认继承是public C++中的隐藏: 只要派生类中出现和基类一样的函数名,基类中的函数就会被派生类中的函数给隐藏(如果派生类和基类中的函数名 ...

  4. Java之重载与覆盖

    有的时候,类的同一种功能有多种实现方式,到底采用哪种实现方式,取决于调用者给定的参数.例如我们最常用的System.out.println()能够打印出任何数据类型的数据,它有多种实现方式.运行时,J ...

  5. java中重载和覆盖(又称重写)的区别

    初次见到这两个单词并没有什么特别的感觉,但是时间长了,却发现书上一会儿用override,一会儿又用overload,搞得我的迷迷糊.于是就做了个总结,希望能对和我一样对这两个概念模糊不清的网友有一个 ...

  6. java系列--重载和覆盖小结

    继承中属性的隐藏和方法的覆盖      java中规定,子类用于隐藏的变量可以和父类的访问权限不同,如果访问权限被改变,则以子类的权限为准      java中允许子类的变量与父类变量的类型完全不同, ...

  7. java 的重写(覆盖) 和重载的区别

    方法的的重写(覆盖) 在类继承中,子类可以修改从父类继承来的行为,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的:名称.返回类型.参数列表.如果在子类中定义一个方法,其方法名称.返回值 ...

  8. java 内部类可以被覆盖吗

    如果创建了一个内部类,然后继承其外围类并重新定义内部类时,"覆盖"内部类就好像是其外围类的一个方法,并不起作用, 这两个内部类是完全独立的两个实体,各自在自己的命名空间内 //: ...

  9. static关键字什么意思?Java中是否可以覆盖一个private或者是static的方法?

    答案:“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问.Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译 ...

随机推荐

  1. PIE结对项目编程

    一.题目描述 构造程序并测试,分别是:     1.不能触发Fault.     2.触发Fault,但是不能触发Error.     3.触发Error,但是不能产生Failure. 二.结对对象 ...

  2. org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]

    运行servlet程序报错: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Cat ...

  3. Educational Codeforces Round 59

    B. Digital root 题意: 题目定义了x的digital root是S(x).S(5)=5,S(38)=S(3+8=11)=S(1+1+2)=2. 有n个询问,每次询问给出ki和xi,要你 ...

  4. 【校招面试 之 C/C++】第29题 C/C++ 关键字extern

    1.extern "C" extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示 ...

  5. [leetcode]158. Read N Characters Given Read4 II - Call multiple times 用Read4读取N个字符2 - 调用多次

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  6. haproxy 学习

    https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-option%20tcp-check https://www.hapro ...

  7. Maven核心简析

    本文以类图的方式,介绍maven核心的12个概念以及相互之间的关系. Table of Contents 1 maven管理的目标:工程(Project) 1.1 工程依赖关系 1.2 工程聚合关系 ...

  8. IDEA 的VM Option设置加快页面的加载速度

    VM Option的设置: -Xms1024M -Xmx2048M -XX:PermSize=128M -XX:MaxPermSize=256M

  9. CentOS日志列表

    anaconda/* 包含至少5个日志文件:anaccmda.log用于保存一般安装消息:anaconda.packaging.log用于保存包安装消息:anaconda.programJog用于调用 ...

  10. Linux 模块管理

    查看模块信息 modinfo module-name 加载模块 insmod module-name 卸载模块 rmmod module-name 生成模块依赖 cd /lib/module/`una ...