Use Private Members from Base Class
最近看了一段代码:在导出类中调用继承自基类的某个public函数,该函数中对基类中的private数据成员
进行了赋值并将结果打印。看到程序的运行结果后,顿时感觉自己之前(我之前的理解这里就不说明了)对于
基类/导出类中私有数据成员的理解并不是很准确。所以写了下面的这个程序,进行简单的验证并加深理解:
- class Insect {
- private int i = 9;
- Insect() {
- System.out.println("Insect.");
- }
- private int x1 = printInit("Insect.x1 initialized");
- //在导出类中不能访问基类的private成员函数print(),但可以访问printInit()(通过printInit()来访问private成员函数print()).
- int printInit(String s) {
- System.out.println(this.toString());
- this.print(s);
- return 47;
- }
- private void print(String s){
- System.out.println(s);
- }
- //在导出类中不能访问基类的private数据成员i,但可以访问usePrivateVar()(通过usePrivateVar()来访问private数据成员).
- public void usePrivateVar(){
- System.out.println(this.toString());
- System.out.println("i = " + this.i);
- }
- }
- public class beetle extends Insect {
- private int x2;
- private int k = printInit("beetle.k initialized");
- {
- x2 = printInit("beetle.x2 initialized");
- }
- public beetle() {
- System.out.println("beetle.");
- }
- public static void main(String[] args) {
- beetle b = new beetle();
- b.usePrivateVar();
- }
- }
Output:
- beetle@1db9742 -- NOTE: NOT Insect.
- Insect.x1 initialized
- Insect.
- beetle@1db9742
- beetle.k initialized
- beetle@1db9742
- beetle.x2 initialized
- beetle.
- beetle@1db9742
- i = 9
此外,注意beetle.x2 initialized 和 beetle.k initialized 的顺序. 与两个变量声明的顺序无关,而是
由printInit()语句的调用顺序(两个变量初始化的顺序)决定。
Use Private Members from Base Class的更多相关文章
- Private Members in JavaScript
Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...
- C++中public、protected以及private的使用
相比C语言,C++中通过class/struct来定义既包含数据,又包含行为的结构,从而支持了“对象”.现实世界中,一个人(一个对象)通常 拥有一些资产(数据),并且掌握某些技能(行为),并且这些资产 ...
- private是自己私有的,protected是可以让孩子知道的,public是公开的
三种访问权限 public:可以被任意实体访问,数据成员和函数成员可在成员函数,友元,继承类中直接使用.亦可以作为接口,供类的用户使用 protected:只允许子类及本类的成员函数访问,在基类中用法 ...
- Public Private Protect Inheritance and access specifiers
In the previous lessons on inheritance, we've been making all of our data members public in order to ...
- JavaScript Patterns 5.3 Private Properties and Methods
All object members are public in JavaScript. var myobj = { myprop : 1, getProp : function() { return ...
- 訪问控制 protected, public, private 对照
OOP 3大特性:数据抽象,继承,动态绑定 3中訪问标号 protected, public, private 对照 用类进行数据抽象:用继承类继承基类的成员,实现继承.通过将基类对应函数声明为vir ...
- SharePoint 2013 Apps TokenHelper SharePointContext OAuth Provider-Hosted App (抄袭,测试 csc.rsp 用)
namespace Microshaoft.SharePointApps { using Microsoft.IdentityModel; using Microsoft.IdentityModel. ...
- Google C++ Style Guide
Background C++ is one of the main development languages used by many of Google's open-source project ...
- 高尔夫管理系统SSH
登录-----------http://localhost:8080/GOLF/Denglu 一.Action 1.处理今日消费数据逻辑的 package com.chinasofti.golf.ac ...
随机推荐
- 试题系列四(袋中有6红球 3黄球 3绿球,从中取6个球,求所有拿到球的颜色的可能 c(12,6))
1.袋中有6红球 3黄球 3绿球,从中取6个球,求所有拿到球的颜色的可能 c(12,6) #include<stdio.h> int main(int argc, char** argv) ...
- PHP 7安装使用体验,升级PHP要谨慎
一.发挥PHP 7高性能的几个要点 PHP 7相对于之前的PHP版本来说可以说性能有了质的飞跃,但是所谓“好马配好鞍,好车配风帆”,想要发挥PHP 7的性能优势,还需要从以下几个方面做准备:(此部分引 ...
- [Android]通知栏与操作栏的高度-State Bar & Navigation Bar
1.通知栏 public static int getStatusBarHeight() { Resources resources = Resources.getSystem(); int reso ...
- 视频采集接口camera link 在8148中的应用
(1)应用背景 (2)camera link 简介 (3)camera link 与8148 (4)camera link 应用实例 ---------------------author:pkf - ...
- jetty端口灵活配置方法
在使用maven开发web项目极大地方便了jar包的依赖,在测试时也可以集成Servlet容器,从启动速度和量级上看,Jetty无疑是不二选择. 如果多个项目同时启动,就会端口冲突了. 一种办法是通过 ...
- java 签名类 Signature
java.security类 Signature java.lang.Object java.security.SignatureSpi java.security.Signature public ...
- python3----字符串中的字符倒转
方法一,使用[::-1]: s = 'python' print(s[::-1]) 方法二,使用reverse()方法: n = list(s) n.reverse() print(''.join(n ...
- Xcode7.3打包ipa文件 报错和解决
An error occurred during export. The file “xxx.ipa” couldn’t be opened because there is no such file ...
- python3 - 闭包
# 定义一个函数def test(number): # 在函数内部再定义一个函数,并且这个函数用到外边函数的变量, # 那么将这个函数以及用到的一些变量称之为 闭包. def text_in(numb ...
- java访问权限修饰符,一张图搞清楚
可横向,纵向进行比较记忆