最近看了一段代码:在导出类中调用继承自基类的某个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的更多相关文章

  1. Private Members in JavaScript

    Private Members in JavaScript Douglas Crockford www.crockford.com JavaScript is the world's most mis ...

  2. C++中public、protected以及private的使用

    相比C语言,C++中通过class/struct来定义既包含数据,又包含行为的结构,从而支持了“对象”.现实世界中,一个人(一个对象)通常 拥有一些资产(数据),并且掌握某些技能(行为),并且这些资产 ...

  3. private是自己私有的,protected是可以让孩子知道的,public是公开的

    三种访问权限 public:可以被任意实体访问,数据成员和函数成员可在成员函数,友元,继承类中直接使用.亦可以作为接口,供类的用户使用 protected:只允许子类及本类的成员函数访问,在基类中用法 ...

  4. 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 ...

  5. JavaScript Patterns 5.3 Private Properties and Methods

    All object members are public in JavaScript. var myobj = { myprop : 1, getProp : function() { return ...

  6. 訪问控制 protected, public, private 对照

    OOP 3大特性:数据抽象,继承,动态绑定 3中訪问标号 protected, public, private 对照 用类进行数据抽象:用继承类继承基类的成员,实现继承.通过将基类对应函数声明为vir ...

  7. SharePoint 2013 Apps TokenHelper SharePointContext OAuth Provider-Hosted App (抄袭,测试 csc.rsp 用)

    namespace Microshaoft.SharePointApps { using Microsoft.IdentityModel; using Microsoft.IdentityModel. ...

  8. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  9. 高尔夫管理系统SSH

    登录-----------http://localhost:8080/GOLF/Denglu 一.Action 1.处理今日消费数据逻辑的 package com.chinasofti.golf.ac ...

随机推荐

  1. 234. Palindrome Linked List【easy】

    234. Palindrome Linked List[easy] Given a singly linked list, determine if it is a palindrome. Follo ...

  2. docker下部署spring boot

    第 5 章 Docker + Spring Boot: 快速搭建和部署Java Web应用 0.你需要: JDK 1.8 : java -version Maven 3.0+ : mvn -v Git ...

  3. c++ header

    简言之:头文件只能包含interface(函数声明.宏定义.类定义(只包含数据成员定义和函数成员声明,不能包含函数成员定义!)),绝对不能包含一丁点的implementation(内部数据结构,实现类 ...

  4. DataUml Design 介绍8-DataUML 1.2版本正式发布(支持SQLite数据库、NetUML开发框架)

    DataUML 1.2版本在软件架构上有了很大的变化,目前DataUML支持Access.SQLite.MY SQL .ORACLE.MS SERVER2000.MS SERVER2005.MS SE ...

  5. python 开发技巧(1)-- 用PyCharm安装第三方库

    在python开发中,我们经常需要安装一些python的第三方类库,包等等,用PyCharm就会安装就会超级方便 1.打开上面的小扳手 2.点击页面左边的Project Interpreter 3.点 ...

  6. git branch merge到master

    使用merge可以合并多个历史记录的流程. 如下图所示,bugfix分支是从master分支分叉出来的. 合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,那么这个合 ...

  7. Error:指向绑定函数的指针只能用于调用函数

    a1.determinant; 改为: a1.determinant(); Eigen::MatrixXd a1(,);//ImagePoint a1<<n1,p1,n2,p2; doub ...

  8. poj 2226(最小覆盖)

    题目链接:http://poj.org/problem?id=2226 思路:将连续的横向水洼看成X集合中的一个点,连续的纵向水洼看成Y集合中的一个点,而将每个水点看成一条边,它连接了所在的X集合中的 ...

  9. iOS - url中文和特殊字符转码###

    - (NSString *)generateUrl:(NSString *)url{ /** 第一个参数:NULL 第二个参数:C语言的字符串 第三个参数:NULL 第四个参数:要转义的字符串,不要乱 ...

  10. 进程 vs. 线程

    我们介绍了多进程和多线程,这是实现多任务最常用的两种方式.现在,我们来讨论一下这两种方式的优缺点. 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Work ...