1、什么是覆盖

在Java中,覆盖是针对继承才有的概念,某一个子类需要某些方法或属性,但又不想使用父类中的同名的方法或属性,就需要使用覆盖。 
直白的来说,就是在子类中编写与父类同名、同参数、同返回值的方法,或同名、同类型的属性,子类对象调用该方法/属性时,运行的是子类的方法,而不会执行父类的方法(除非在方法第一行写super();会先执行父类方法,再继续执行子类代码。)

了解类的构造函数看这里:类、对象到底有什么秘密 
了解更多继承看这里:java类的继承有什么意义

2、构造函数如何覆盖

了解类的构造函数看这里:类、对象到底有什么秘密 
当子类继承一个父类时,构造子类时需要调用父类的构造函数,存在三种情况

  1. 父类无构造函数或者一个无参数构造函数时。子类若无构造函数或者有无参数构造函数,子类构造函数中不需要显式调用父类的构造函数,系统会自动在调用子类构造函数前调用父类的构造函数。
  2. 父类只有有参数构造函数时。子类在构造方法中必须要显示调用父类的构造函数,否则编译出错。
  3. 父类既有无参数构造函数,也有有参构造函数。子类可以不在构造方法中调用父类的构造函数,这时使用的是父类的无参数构造函数。

3、方法如何覆盖

  1. 子类覆盖父类的方法,必须有同样的参数和返回类型。
  2. 子类覆盖父类的方法,在jdk1.5后,参数、返回类型可以是父类方法返回类的子类。
  3. 子类覆盖父类的方法,可以修改方法的修饰符,但只能把方法的作用域放大,而不能把public修改为private。 
    了解更多java修饰符看这里:public、privite、protected有什么区别
  4. 子类方法能够访问父类的protected属性,但不能够访问默认的属性。
  5. 子类的静态方法,与父类同名静态方法互不影响。由于静态方法使用类名调用,使用子类类名调用子类的方法,使用父类类名调用父类的方法。
  6. 多态时,当子类覆盖了父类的方法,使用子类覆盖的方法。 
    了解什么是多态:[java的多态性都有什么表现][6] 
    [6]:

4、属性如何覆盖

  1. 当子类覆盖父类的实例变量时,父类方法使用的是父类的实例变量,子类方法使用的是子类的实例变量。
  2. 子类或父类使用实例变量时,都相当于在前面加了一个this指针(this.)。

了解更多java变量看这里:局部变量、类变量、实例变量有什么区别

5、实例

class SuperClass { private int number; public SuperClass() { this.number = 0; } public SuperClass(int number) { this.number = number; } public int getNumber() { number++; return number; }
} class SubClass1 extends SuperClass { public SubClass1(int number) { super(number); } } class SubClass2 extends SuperClass { private int number; public SubClass2(int number) { super(number); } } public class SubClass extends SuperClass { private int number; public SubClass(int number) { super(number); } public int getNumber() { number++; return number; } public static void main(String[] args) { SuperClass s = new SubClass(20); SuperClass s1 = new SubClass1(20); SuperClass s2 = new SubClass2(20); System.out.println(s.getNumber()); System.out.println(s1.getNumber()); System.out.println(s2.getNumber()); //结论一:多态时,当子类覆盖了父类的方法,使用子类覆盖的方法 //结论二:当子类覆盖父类的实例变量时,父类方法使用的是父类的 实例变量,子类方法使用的是子类的实例变量} } 

输出结果: 

21 
21

原文地址:http://blog.csdn.net/ooppookid/article/details/51203923

Java千百问_05面向对象(008)_java中覆盖是什么相关推荐

  1. Java千百问_05面向对象(004)_java接口到底是什么

    1.什么是接口 接口(interface)不是一个类,它是抽象方法的集合.一个类实现一个接口,从而继承和实现接口的抽象方法.  抽象方法看这里:java中抽象概念如何体现的 接口的特点如下,先看与类类 ...

  2. Java千百问_05面向对象(012)_泛型是什么

    1.什么是泛型 泛型是Java SE 1.5的新特性,泛型即参数化类型,也就是说所操作的数据类型被指定为一个参数.  这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法.  ...

  3. Java千百问局部变量、类变量、实例变量有什么区别

    Java千百问局部变量.类变量.实例变量有什么区别 局部变量.类变量.实例变量有什么区别 在聊局部变量.类变量.实例变量有什么区别之前,我们需要了解一下Java变量. 1.Java变量是什么 在数学世 ...

  4. Java千百问_03基本语法(002)_java都有哪些关键字

    java都有哪些关键字 首先我们来看看什么是关键字,关键字的含义. 1.java关键字是什么意思 关键字是电脑语言里事先定义的,有特别意义的特殊标识符,又叫保留字. Java的关键字对Java的编译器 ...

  5. Java千百问_03基本的语法(005)_二进制是如何做位运算的

    点击进入_很多其它_Java千百问 二进制是如何做位运算的 程序中的全部数在计算机内存中都是以二进制的形式储存的.位运算说白了,就是直接对整数在内存中的二进制位进行操作. 其它运算符看这里:java种 ...

  6. Java千百问_07JVM架构(015)_XmnXmsXmxXss有什么区别

    点击进入_更多_Java千百问 1.XmnXmsXmxXss有什么区别 首先,Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. ...

  7. Java千百问_07JVM架构(009)_什么是新生代的复制算法

    点击进入_更多_Java千百问 1.什么是新生代的复制算法 了解堆内存看这里:java堆内存是什么样的 了解java垃圾回收看这里:java垃圾回收机制是什么 所谓复制算法(Copying),即将内存 ...

  8. Java千百问_01基本概念(007)_线程的状态有哪些

    点击进入_更多_Java千百问 1.线程的状态有哪些 在java中java.lang.Thread类有一个变量threadStatus,标示了该线程的当前状态,它是一个int类型,但是对应的get方法 ...

  9. Java千百问_01基本概念(012)_Socket是什么

    [点击进入_更多_Java千百问][1] [1]: http://blog.csdn.net/ooppookid/article/category/6134850 ###1.什么是Socket Soc ...

  10. Java千百问_06数据结构(014)_java数组如何存储在内存中

    1.数组的内存空间是何时分配的 Java中的数组是用来存储同一种数据类型的数据结构,一旦初始化完成,即所占的空间就已固定下来,初始化的过程就是分配对应内存空间的过程.即使某个元素被清空,但其所在空间仍 ...

最新文章

  1. 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
  2. c语言关键字_C语言初学者必须掌握的关键字!
  3. Mybatis使用接口开发
  4. Android项目Build报错Unable to execute dx(65535问题解决方案)
  5. Memory Dog for Autodesk Maya
  6. linux下文件操作
  7. ubutnu16.04安装ros2
  8. 第二次作业--熟悉使用工具
  9. Nature methods | Alevin-fry, 一种高效准确的单细胞测序数据预处理工具
  10. CSS具有最高优先级 !important
  11. 江苏自考计算机组成原理多少分及格,自考《计算机组成原理》基本概念第七章...
  12. google bert
  13. linux调用线程函数,作为线程调用的C函数-Linux Userland程序
  14. C++ String16与const char*及char*与vector相互转换
  15. 实验一: 网络侦查与网络扫描
  16. Linux安装gcc的四种方法
  17. ip纯真数据库查询国家省市名称
  18. linux bridge 添加fdb,Linux协议栈--网桥设备的实现
  19. Android应用启动白屏问题解决办法
  20. 算法实现- 数字转金额大写

热门文章

  1. atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结
  2. Atitit. js mvc 总结(2)----angular 跟 Knockout o99 最佳实践
  3. Paip. DDBS 分布式 数据库系统 attilax总结C0G
  4. paip.输入法编程----一级汉字1000个
  5. paip.svn 导入项目到SVN库
  6. 阿里云资深技术专家何勉:研发效能提升的系统方法
  7. 1500页,40万字,阿里淘系技术2020技术年货来了!
  8. ECS 云助手,实现云上运维自动化
  9. 金融行业灾备压力大?看中和农信如何从容应对
  10. 【优化算法】人工蜂鸟算法(AHA)【含Matlab源码 1543期】