采访者:什么是封装,你如何用Java实现它?
我: 封装是一种隐藏客户端信息的机制.该信息可以是数据或实现或算法.我们使用访问修饰符来实现这一点.
采访者:这是数据隐藏.我们如何在Java中实现封装?
我:uummmm
具体问题:除了'Access Modifiers'之外,在Java中实现Encapsulation的方法是什么?
我知道有很多关于这个问题的帖子,它有实时例子的理论解释.这些OOP术语非常简单,但对于像我这样的初学者来说更加困惑.但我期待这里不是一个定义和实时的例子但是期待java中的代码片段.
请问任何人都可以为Java中的每一个提供非常小的代码片段,这将有助于我理解封装与信息隐藏与抽象与数据隐藏的实际关系吗?
我已经读过1000个位置的静态变量没有被继承.但那么这段代码如何正常工作呢?
Parent.java
public class Parent {
static String str = "Parent";
}
Run Code Online (Sandbox Code Playgroud)
Child.java
public class Child extends Parent {
public static void main(String [] args)
{
System.out.println(Child.str);
}
}
Run Code Online (Sandbox Code Playgroud)
此代码打印"父".
还可以在几个位置读取数据隐藏的概念.
Parent.java
public class Parent {
static String str = "Parent";
}
Run Code Online (Sandbox Code Playgroud)
Child.java
public class Child extends Parent {
static String str = "Child";
public static void main(String [] args)
{
System.out.println(Child.str);
}
}
Run Code Online (Sandbox Code Playgroud)
现在输出是"Child".
那么这是否意味着静态变量是继承的,但它们遵循数据隐藏的概念?
这是我的设置:
在public.h:
#ifndef PUBLIC_H_
#define PUBLIC_H_
#include "func.h"
/*extern typedef struct _my_private_struct PRIVATE_;*/
typedef struct _my_private_struct PRIVATE_; /* Thanks to larsmans and Simon Richter */
#endif
Run Code Online (Sandbox Code Playgroud)
在struct.h中
#ifndef STRUCT_H_
#define STRUCT_H_
struct _my_private_struct {
int i;
};
#endif
Run Code Online (Sandbox Code Playgroud)
在func.h中:
#ifndef FUNC_H_
#define FUNC_H_
#include "struct.h"
/* typedef struct _my_private_struct PRIVATE_; */
extern PRIVATE_ * get_new(int);
#endif
Run Code Online (Sandbox Code Playgroud)
在func.c中:
#include <stdlib.h>
#include "func.h"
PRIVATE_ * get_new(int i)
{
PRIVATE_ *p = (PRIVATE_ *) malloc(sizeof(PRIVATE_));
if (p == NULL) return NULL;
p->i = …Run Code Online (Sandbox Code Playgroud) 在ColdFusion 10中通过<cfset THIS.invokeImplicitAccessor = "true">在application.cfc中设置我们现在可以直接访问属于cfc的任何属性.
我不确定开发人员为什么会使用这种功能.
我的问题是,这是否违反了面向对象编程的数据隐藏原则?
data-hiding ×5
java ×3
oop ×3
abstraction ×1
c ×1
coldfusion ×1
inheritance ×1
static ×1
struct ×1