2019独角兽企业重金招聘Python工程师标准>>>

关于继承中变量和方法的覆盖:

1, 与基类中同名的变量,会被派生类所覆盖(同时存在但是有独立的值),直接取值将是派生类的值,但是基类的变量也是同时存在的。如果通过派生类函数访问,得到派生类的值。如果通过从基类继承的方法访问,得到基类的值。如果通过基类的变量,但是实际类型是派生类,得到的将是基类的值。

2,与基类中同名的方法,如果签名完全一致,会覆盖基类的方法。同时在基类中与派生类同名,但是签名不同的函数并不会被覆盖(这与C++不同,C++中名字相同就会全部覆盖,而不管签名是否一致)。通过@Override可以显示指定派生类的函数为覆盖基类同签名的函数,如果没有同签名函数则报错,避免本来想覆盖,结果变成了重载。另外,不能用static方法覆盖非static方法,反之也不可以。

以下是一个例子:

package LearnJava;/*** Created by Jimmy on 2015/5/29.*/
class BaseClass{int x;void printvar(){System.out.println("printvar(): x is: " + x);}void mf1(){System.out.println("BaseClass.mf1()");}void mf1(int i){System.out.println("BaseClass.mf1(int)");}void mf2(){System.out.println("BaseClass.mf2()");}
}class DerivedClass extends BaseClass{float x;void printvar(){System.out.println("printvar(): x is: " + x);System.out.println("printvar(): super.x is: " + super.x);}void mf1(){System.out.println("DerivedClass.mf1()");}void mf4(){System.out.println("DerivedClass.mf4()");}
}
public class Inherit {public static void main(String[] args){//基类的成员变量BaseClass bc = new BaseClass();System.out.println("BaseClass.x is: " + bc.x);//派生类的成员变量DerivedClass dc = new DerivedClass();System.out.println("DerivedClass.x is: " + dc.x);dc.mf2();dc.mf4();//派生类的成员变量和super访问的基类成员变量dc.printvar();//基类的成员变量BaseClass bchandler = new DerivedClass();System.out.println("BaseClass handler x is: " + bchandler.x);bchandler.mf1();bchandler.mf1(4);}
}

执行结果是:

BaseClass.x is: 0 //基类为int
DerivedClass.x is: 0.0 //派生类为float
BaseClass.mf2() //调用继承自基类的函数
DerivedClass.mf4() //调用派生类自己实现的函数
printvar(): x is: 0.0 //派生类的函数取得的成员变量为派生类的
printvar(): super.x is: 0 //也可以通过super取得基类的成员变量
BaseClass handler x is: 0 //通过基类的句柄,一样取得的是基类的成员变量
DerivedClass.mf1() //派生类的方法覆盖了基类的方法
BaseClass.mf1(int) //同时基类的重载函数被继承了下来

打印信息:

转载于:https://my.oschina.net/jimmyhan/blog/422305

Java继承中成员变量和成员函数的覆盖相关推荐

  1. java中静态变量和成员变量的区别

    java中静态变量和成员变量的区别 1.静态变量. 由static修饰的变量称为静态变量,其实质上就是一个全局变量.如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰:没有被静态修饰的内容,其 ...

  2. C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)

    接上篇:C++57个入门知识点_16 类的标准写法(类名.成员变量.成员函数及对象命名规则:成员变量一般为私有,成员函数为公有并暴露给外部使用成员变量:防止类过大,声明写在.h,实现写在.cpp,调用 ...

  3. Java 多态中成员变量与成员属性的特点【复习】

    package firstchapter;/*** 多态中成员变量与成员属性的特点*/ public class polymorphic {public static void main(String ...

  4. c++学习之const成员变量与成员函数

    c++学习之const成员变量与成员函数 常类型是指用类型修饰符const说明的类型,常类型的变量或者对象的值是不能被更新的.因此,定义或说明常类型时必须初始化. 如果在一个类声明常数据成员,那么任何 ...

  5. C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元

    1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...

  6. 成员变量和成员函数分开存储

    首先来说结论: 1.在C++中,类内的成员变量和成员函数分开存储 2.只有非静态成员变量才属于类的对象上 空类(类中上面对象都没没有)占用内存大小为:1 #include <iostream&g ...

  7. C++ const成员变量和成员函数

    const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字.初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表. co ...

  8. C++类的成员变量和成员函数的介绍

    类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型.类这种数据类型是一个包含成员变量和成员函数的集合. 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存.但 ...

  9. 类和对象- C++对象模型和this指针- 成员变量和成员函数分开存储

    成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 空对象占用内存空间 class Person {};void test01() {Pers ...

  10. C++成员变量和成员函数分开存储

    C++t成员变量和成员函数分开存储 类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person ...

最新文章

  1. 6月11号=》121页-125页
  2. 清华南开出品最新视觉注意力机制Attention综述
  3. 2017上半年软考 第七章 重要知识点
  4. 学会这几个公式技巧,瞬间你就是高手
  5. 两道与二进制有关的sequence
  6. matlab计算电路环流,双反星形整流电路并联运行环流分析
  7. Delphi 能不能从Ring 3进入Ring 0
  8. ibe加密原理_ibe 基于身份的IBE加密源代码,采用C++语言编写,能够运行。 Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...
  9. 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
  10. Linux 线程(1):线程概述
  11. 大白话 设计模式之虚拟工厂
  12. 90年代中国人一个月挣多少钱?一组数据带你看懂90年代消费情况
  13. 《南溪的目标检测学习笔记》——数据集制作(legacy)
  14. 七周七语言——Prolog(二)
  15. 图解FPGrowth 算法
  16. 自动识别语音生成字幕
  17. VRPN-OSVR介绍
  18. linux cpan 参数配置,Perl学习笔记之CPAN使用介绍
  19. BUUCTF-MISC-九连环
  20. 猿创征文 | DevOps运维的10个日常使用工具分享

热门文章

  1. 超详细深度学习debug指南,国外小哥手把手教你如何调试模型 | 附PPT
  2. 更快更高更强大,这是英特尔AI助力长城修缮的新进展
  3. AI产品开发指南:5大核心环节搞定机器学习工作流
  4. Attention!神经网络中的注意机制到底是什么?
  5. 快速搭建LAMP环境
  6. Angular 4.x 自定义表单控件
  7. ubuntu上安装rsync+sersync
  8. Spark1.0新特性--Spark SQL
  9. Exchange 2010部署
  10. 用mysqlslap对MySQL进行压力测试