关于java同一个类的不同对象之间私有域之间的访问权限 对象类java内存存储 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 实际上,方法能不能访问相应的数据是和它们之间的逻辑关系相关的,和在什么地方储存没有关系.说白了就是它们所属的类的关系:是属于一个类、同一个包的类、子类还是没有任何关系。不知道楼主是否了解C语言,这里使用C语言模仿了楼主的源码,可以更好的解释这个问题。如果关于源码有什么不懂的,可以参考这个链接http://coolshell.cn/articles/11377.htmlmain.c#include <stdio.h>#include "demo.h"int main(void){ //Demo1 d; 错误!storage size of 'd' isn't known.不知道应该分配多大内存 Demo1 *d1 = createDemo1(1); Demo1 *d2 = createDemo1(2); printf( "%d\n", Demo1ifEqual1(d1, d2) ); Demo2 *d3 = createDemo2(3); printf( "%d\n", Demo1ifEqual2(d1, d3) ); destroyDemo1(d1); destroyDemo1(d2); destroyDemo2(d3); return 0;}demo.h#ifndef DEMO_H#define DEMO_H#include <stdbool.h>struct _Demo1;struct _Demo2;typedef struct _Demo1 Demo1;typedef struct _Demo2 Demo2;Demo1 *createDemo1(int i);bool Demo1ifEqual1(Demo1* thiz, Demo1* demo);bool Demo1ifEqual2(Demo1* thiz, Demo2* demo);void destroyDemo1(Demo1 *d);Demo2 *createDemo2(int i);bool Demo2ifEqual2(Demo2* thiz, Demo2* demo);void destroyDemo2(Demo2 *d);#endifdemo1.c#include <stdlib.h>#include "demo.h"struct _Demo1{ int i;};Demo1 *createDemo1(int i){ Demo1 *d = (Demo1 *)malloc(sizeof(Demo1)); d->i = i; return d;}bool Demo1ifEqual1(Demo1* thiz, Demo1* demo){ return thiz->i == demo->i;}bool Demo1ifEqual2(Demo1* thiz, Demo2* demo){ //return thiz->i == demo->i; 错误,dereferencing pointer to incomplete type, 不知道demo2是否有i这个成员,也不知道位置 return 1;}void destroyDemo1(Demo1 *d){ free(d);}demo2.c#include <stdlib.h>#include "demo.h"struct _Demo2{ int i;};Demo2 *createDemo2(int i){ Demo2 *d = (Demo2 *)malloc(sizeof(Demo2)); d->i = i; return d;}bool Demo2ifEqual2(Demo2* thiz, Demo2* demo){ return thiz->i == demo->i;}void destroyDemo2(Demo2 *d){ free(d);} d1和d2都是Demo的对象变量,因为new了两次,在堆内存里应该是分开存储的吧是分开存储的,在堆中是不同的对象那为什么d1还可以不通过d2自己的方法(get方法),来得到d2的私有数据域呢?private修饰的变量,在本类内时有权限访问的,出了类就访问不到了。d1 和 d2 都是Demo 类的实例,比较方法ifEqual1 是Demo 的实例方法,所以实例是可以访问到的,作为Demo 类的实例,在类的内部自然可以访问到自己的私有变量。如果出了Demo 类,d1不可以再访问到i的值。和两个对象是一个类的有关系吗?是因为两个对象是一个类的实例的原因。同样,问什么ifEqual2方法就不行了呢?因为是不同类?确实是因为不同类的原因。 看来和我想的一样,,但是好难接受。我理解的private是类内可以访问,类的每个实例里自己能访问得到,但没想到类的不同实例间也可以访问。。那类和它的实例到底算是什么关系像你说的那样,类的实例也算是类内部吗? 一个关于多线程与按钮的问题 Java窗口 求jbulider2005的教程!! 关于加密的问题?? 用java写的图书管理系统不知道咋运行 不妹求救,打印问题怎样把JTable中的内容打印出来急用在线等待。 请教JTextField的Enter问题! 急!!!请问websphere一个简单的问题,一定给分 请高手帮忙:applet、socket、数据库安全问题 看泛型时遇到一个问题求解答 java.sql.BatchUpdateException: Io exception: Broken pipe java 在socket中如何自定义成帧,以及如何调用
不知道楼主是否了解C语言,这里使用C语言模仿了楼主的源码,可以更好的解释这个问题。如果关于源码有什么不懂的,可以参考这个链接http://coolshell.cn/articles/11377.html
main.c#include <stdio.h>
#include "demo.h"int main(void)
{
//Demo1 d; 错误!storage size of 'd' isn't known.不知道应该分配多大内存
Demo1 *d1 = createDemo1(1);
Demo1 *d2 = createDemo1(2);
printf( "%d\n", Demo1ifEqual1(d1, d2) ); Demo2 *d3 = createDemo2(3);
printf( "%d\n", Demo1ifEqual2(d1, d3) ); destroyDemo1(d1);
destroyDemo1(d2);
destroyDemo2(d3);
return 0;
}demo.h#ifndef DEMO_H
#define DEMO_H#include <stdbool.h>struct _Demo1;
struct _Demo2;
typedef struct _Demo1 Demo1;
typedef struct _Demo2 Demo2;Demo1 *createDemo1(int i);
bool Demo1ifEqual1(Demo1* thiz, Demo1* demo);
bool Demo1ifEqual2(Demo1* thiz, Demo2* demo);
void destroyDemo1(Demo1 *d);Demo2 *createDemo2(int i);
bool Demo2ifEqual2(Demo2* thiz, Demo2* demo);
void destroyDemo2(Demo2 *d);#endifdemo1.c#include <stdlib.h>
#include "demo.h"struct _Demo1{
int i;
};Demo1 *createDemo1(int i)
{
Demo1 *d = (Demo1 *)malloc(sizeof(Demo1));
d->i = i;
return d;
}bool Demo1ifEqual1(Demo1* thiz, Demo1* demo)
{
return thiz->i == demo->i;
}bool Demo1ifEqual2(Demo1* thiz, Demo2* demo)
{
//return thiz->i == demo->i; 错误,dereferencing pointer to incomplete type, 不知道demo2是否有i这个成员,也不知道位置
return 1;
}void destroyDemo1(Demo1 *d)
{
free(d);
}demo2.c#include <stdlib.h>
#include "demo.h"struct _Demo2{
int i;
};Demo2 *createDemo2(int i)
{
Demo2 *d = (Demo2 *)malloc(sizeof(Demo2));
d->i = i;
return d;
}bool Demo2ifEqual2(Demo2* thiz, Demo2* demo)
{
return thiz->i == demo->i;
}void destroyDemo2(Demo2 *d)
{
free(d);
}
是分开存储的,在堆中是不同的对象那为什么d1还可以不通过d2自己的方法(get方法),来得到d2的私有数据域呢?
private修饰的变量,在本类内时有权限访问的,出了类就访问不到了。d1 和 d2 都是Demo 类的实例,比较方法ifEqual1 是Demo 的实例方法,所以实例是可以访问到的,作为Demo 类的实例,在类的内部自然可以访问到自己的私有变量。如果出了Demo 类,d1不可以再访问到i的值。和两个对象是一个类的有关系吗?
是因为两个对象是一个类的实例的原因。同样,问什么ifEqual2方法就不行了呢?因为是不同类?
确实是因为不同类的原因。
看来和我想的一样,,但是好难接受。我理解的private是类内可以访问,类的每个实例里自己能访问得到,但没想到类的不同实例间也可以访问。。
那类和它的实例到底算是什么关系像你说的那样,类的实例也算是类内部吗?