最近遇到个很有意思的问题,原来一直没太注意。这个问题是面向对象的访问控制是基于class还是对象。先写个例子。现在有个一类A如下:
class A { private String str; public A(String str) { this.str = str; } public void print(A a) { a.private_method(); } private void private_method() { System.out.println(str); } }
在方法里调用如下:
public static void main(String[] args) { A a1 = new A("a1"); A a2 = new A("a2"); a2.print(a1); a1.print(a2); }
这么做编译通过,并且顺利执行。这就出现了一个很有意思的现象,实例a1和a2都能调用对方的private_method()方法。无论是Java还是C++,都是这样的情况。
从程序的实现角度来说,调用方法和类属性的本质,是通过“特征”在对象所加载的堆区寻找合适的方法和属性。而“特征”则是由class模板定义的,所以无论根据同一个class模板new出多少个新对象,所包含的“特征”都是相同的。这就是访问控制是根据class来而不是Object来的。参考了JDK的文档,的确也是这么说的。
针对刚刚的例子略做修改就更容易理解了:
class A { private String str; public A(String str) { this.str = str; } public static void print(A a) { a.private_method(); } private void private_method() { System.out.println(str); } }
调用如下:
public static void main(String[] args) { A a1 = new A("a1"); A a2 = new A("a2"); A.print(a1); A.print(a2); }
这样就可以很清楚的知道,访问权限的控制是基于class的了。
相关推荐
访问权限 返回值数据类型 成员方法名(形式参数列表){ …方法实现 } } 面向对象程序设计与实践-Java抽象类和接口[33页]全文共33页,当前为第7页。 抽象类的特点 5-1关联知识 (1)抽象类中可以有抽象方法,也可以有...
2.JAVA 特性 2.1 面向对象 Java 的特点之一就是面向对象[2],是程序设计方法的一种。 "面向对象程序设计语言" 的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的 实际集合体叫做...
4.1 面向对象编程与基于对象编程 4.1.1 什么是对象 4.1.2 面向对象编程 4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 JavaScript对象的生成 4.2.1 HTML文档...
4.1 面向对象编程与基于对象编程 4.1.1 什么是对象 4.1.2 面向对象编程 4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 JavaScript对象的生成 4.2.1 HTML文档...
第十三课 class 类学习目录类基本介绍与用法类继承类成员访问修饰符一.类基本介绍与用法以前我们学习过 es5 中构造函数来构建基于面向对象的组件,主要是因为
public 表示全局,类内部外部子类都可以访问;复制代码 代码如下:<?php class Test{ public $name=’Janking’, $sex=’male’, $age=23; function __construct(){ echo $this->age.' ’.$this->name.'...
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化...
第12章 实例--面向对象的Windows应用程序框架 337 12.1 Windows应用程序的基本结构 337 12.1.1 应用程序的用户界面 337 12.1.2 消息驱动的程序结构 339 12.2 MFC类库(Microsoft Foundation Class library) 341 ...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在...
设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的粒度将它们归 类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时...
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多...
其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:所以,使用instanceof在绝大多数情况下并不是...