Java继承中成员变量和成员函数的覆盖
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继承中成员变量和成员函数的覆盖相关推荐
- java中静态变量和成员变量的区别
java中静态变量和成员变量的区别 1.静态变量. 由static修饰的变量称为静态变量,其实质上就是一个全局变量.如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰:没有被静态修饰的内容,其 ...
- C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)
接上篇:C++57个入门知识点_16 类的标准写法(类名.成员变量.成员函数及对象命名规则:成员变量一般为私有,成员函数为公有并暴露给外部使用成员变量:防止类过大,声明写在.h,实现写在.cpp,调用 ...
- Java 多态中成员变量与成员属性的特点【复习】
package firstchapter;/*** 多态中成员变量与成员属性的特点*/ public class polymorphic {public static void main(String ...
- c++学习之const成员变量与成员函数
c++学习之const成员变量与成员函数 常类型是指用类型修饰符const说明的类型,常类型的变量或者对象的值是不能被更新的.因此,定义或说明常类型时必须初始化. 如果在一个类声明常数据成员,那么任何 ...
- C++学习笔记(十)成员变量和成员函数分开存储、this指针、空指针访问成员函数、const修饰成员函数、友元
1.成员变量和成员函数分开存储 //1.在C++中,类内的成员变量和成员函数分开存储 //2.只有非静态成员变量才属于类的对象上 //空对象占用内存空间为:1 //C++编译器会给每个空对象也分配一个 ...
- 成员变量和成员函数分开存储
首先来说结论: 1.在C++中,类内的成员变量和成员函数分开存储 2.只有非静态成员变量才属于类的对象上 空类(类中上面对象都没没有)占用内存大小为:1 #include <iostream&g ...
- C++ const成员变量和成员函数
const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字.初始化 const 成员变量只有一种方法,就是通过构造函数的初始化列表. co ...
- C++类的成员变量和成员函数的介绍
类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型.类这种数据类型是一个包含成员变量和成员函数的集合. 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存.但 ...
- 类和对象- C++对象模型和this指针- 成员变量和成员函数分开存储
成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 空对象占用内存空间 class Person {};void test01() {Pers ...
- C++成员变量和成员函数分开存储
C++t成员变量和成员函数分开存储 类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person ...
最新文章
- 6月11号=》121页-125页
- 清华南开出品最新视觉注意力机制Attention综述
- 2017上半年软考 第七章 重要知识点
- 学会这几个公式技巧,瞬间你就是高手
- 两道与二进制有关的sequence
- matlab计算电路环流,双反星形整流电路并联运行环流分析
- Delphi 能不能从Ring 3进入Ring 0
- ibe加密原理_ibe 基于身份的IBE加密源代码,采用C++语言编写,能够运行。 Crypt_De algrithms 解密 238万源代码下载- www.pudn.com...
- 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
- Linux 线程(1):线程概述
- 大白话 设计模式之虚拟工厂
- 90年代中国人一个月挣多少钱?一组数据带你看懂90年代消费情况
- 《南溪的目标检测学习笔记》——数据集制作(legacy)
- 七周七语言——Prolog(二)
- 图解FPGrowth 算法
- 自动识别语音生成字幕
- VRPN-OSVR介绍
- linux cpan 参数配置,Perl学习笔记之CPAN使用介绍
- BUUCTF-MISC-九连环
- 猿创征文 | DevOps运维的10个日常使用工具分享