最近遇到个很有意思的问题,原来一直没太注意。这个问题是面向对象的访问控制是基于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的了。
相关推荐
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作这些数据的方法封装在一起。在Python中,面向对象编程是其核心特性之一,使得Python成为了一种非常适合...
面向对象编程在JavaScript中的实现主要基于以下三个概念:构造函数、原型和实例化。构造函数是一个特殊类型的函数,用于创建和初始化一个新对象。当你定义一个构造函数时,实际上是在定义一个对象类型。例如: ```...
在本实验中,我们将深入探讨C++的面向对象特性,这是C++编程语言的核心概念,也是现代软件开发的重要工具。面向对象编程(Object-Oriented Programming, OOP)以其封装、继承和多态三大特性,使得代码更加模块化,...
### Python面向对象编程知识点解析 #### 一、面向对象三大特性及作用 **1. 封装** 封装是面向对象编程中的一个重要概念,它通过隐藏类的内部细节并对外提供公共接口来保护数据的安全性和完整性。封装使得类的使用...
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作这些数据的方法封装在一起。在Python中,面向对象编程是其核心特性之一,允许开发者创建复杂、可维护的...
4. **类(Class)**:ES6引入了类语法糖,使得JavaScript的面向对象更加符合传统面向对象语言的写法,但实际上,这些“类”仍然基于原型实现。 ```javascript class Person { constructor(name) { this.name = ...
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它基于“对象”的概念,通过封装、继承和多态等核心特性,实现了代码的复用和模块化,极大地提高了软件开发的效率和可维护性。...
面向对象软件构造是软件开发领域中的一个重要概念,它基于面向对象编程(Object-Oriented Programming,简称OOP)的理念,通过模拟现实世界中的实体和它们之间的关系来构建复杂的软件系统。这种方法使得代码更加模块...
类的设计是面向对象程序设计的重点,而不是对象的设计。一个类按同种方法产生出来的多个对象,其初始状态都是一样的,但是修改其中一个对象的时候,其他的对象是不会受到影响的。 类的声明和定义在使用类之前,必须...
在VB.NET编程中,面向对象(Object-Oriented Programming,OOP)是一种强大的设计和开发方法,它基于类(CLASS)的概念,使代码更易于维护、重用和扩展。本资料包“VB.NET面向对象CLASS的实现”深入探讨了如何在VB...
综上所述,面向对象程序设计的核心在于创建具有封装性、继承性和多态性的对象,而这些特性通过类与对象、属性、方法和继承等概念来实现。掌握这些基础知识对于编程人员来说至关重要,不仅有助于编写结构清晰、易于...
1. **面向对象编程(Object-Oriented Programming, OOP)**:面向对象编程是一种程序设计范式,它基于“对象”的概念,通过封装、继承和多态等机制,使代码更易于理解和维护。C#是支持面向对象编程的语言之一,具有...
面向对象程序设计是一种编程范式,它基于“对象”的概念,将数据结构和操作这些数据的方法结合在一起。C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更...
Python面向对象编程是一种基于类和对象概念的编程范式,它支持封装、继承和多态等面向对象的特性。在面向对象编程中,类可以看作是对象的蓝图或模板,而对象则是根据类创建的实例。类中可以定义字段(数据成员)、...
面向对象程序设计是现代软件开发中的核心概念,它基于实体的抽象、封装、继承和多态等原则。C++是一种支持面向对象编程的强大的编程语言,它的类是实现面向对象特性的重要工具。在这个主题中,我们将深入理解C++中的...
【标题】"【传智播客.Net培训—C#面向对象基础】01面向对象简介1"所涉及的知识点主要集中在C#编程语言的基础部分,特别是面向对象编程(Object-Oriented Programming,简称OOP)的基本概念。面向对象是现代软件开发...
Java面向对象程序设计是编程领域中的核心概念,它基于面向对象的编程思想,将现实世界中的实体抽象为类,通过类来创建对象,实现代码的复用和模块化。在这个期末考试试题中,我们看到了一系列关于Java编程的问题,...
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它基于“对象”的概念,强调数据和操作数据的方法结合在一起。C++是实现面向对象编程的主流语言之一,以其强大的功能和灵活性著称。...
Delphi是一种强大的面向对象的编程环境,以其高效的编译器和直观的集成开发环境(IDE)而闻名。在深入探讨Delphi的面向对象特性之前,我们先来了解一下面向对象编程的基本概念。 面向对象编程(Object-Oriented ...