まさに3つのアクセスタイプだけでなく、異なる言語ではさらに多くのタイプがあります。たとえば
:
- 公共 - このアクセス修飾子で定義されたクラスまたはそのメンバーも、クラスのスコープ外から、どこからでも公にアクセスできるようになります。
- プライベート - このキーワードを持つクラスメンバーは、クラス自体内でアクセスされます。クラスインスタンスの参照を使用して、外部のクラスアクセスからメンバーを保護します。
- プロテクト - サブクラスが保護されたスーパークラスメンバにアクセスできるようにすることを除いて、プライベートと同じです。
- 抽象 - このキーワードは、PHPクラスとその関数にのみ使用できます。抽象関数を含むためには、PHPクラスは抽象クラスでなければなりません。
- final - サブクラスがfinalキーワードで定義されたスーパークラスメンバをオーバーライドできないようにします。
- 内部 - 宣言を含むプログラム内でアクセスでき、同じアセンブリレベルではアクセスできますが、別のアセンブリからはアクセスできません。
- 保護内部 - 保護された内部と内部の両方のアクセスレベルが同じです。同じアセンブリ内のどこにでもアクセスでき、同じクラスのクラスにも同じクラスから継承されます。
これらのうちのいくつかは、クラスにも関数にも変数にも適用できます。
ほとんどの言語では、すべてのクラスメンバーはpublicアクセスタイプ(たとえばJavaは除く)で宣言されています。
メインの質問に戻ります。
このアクセス修飾子をすべて適用すると、コンポーネントのカプセル化が容易になります。
C++(
taken from here)で、このようなアクセス修飾子の使用の
簡単な例:
#include <iostream>
#include<conio.h>
using std::cout;
using std::endl;
struct B { // default access modifier inside struct is public
void set_n(int v) { n = v; }
void f() { cout << "B::f" << endl; }
protected:
int m, n; // B::m, B::n are protected
private:
int x;
};
struct D : B {
using B::m; // D::m is public
int get_n() { return n; } // B::n is accessible here, but not outside
// int get_x() { return x; } // ERROR, B::x is inaccessible here
private:
using B::f; // D::f is private
};
int main() {
D d;
// d.x = 2; // ERROR, private
// d.n = 2; // ERROR, protected
d.m = 2; // protected B::m is accessible as D::m
d.set_n(2); // calls B::set_n(int)
cout << d.get_n() << endl; // output: 2
// d.f(); // ERROR, B::f is inaccessible as D::f
B& b = d; // b references d and "views" it as being type B
// b.x = 3; // ERROR, private
// b.n = 3; // ERROR, protected
// b.m = 3; // ERROR, B::m is protected
b.set_n(3); // calls B::set_n(int)
// cout << b.get_n(); // ERROR, 'struct B' has no member named 'get_n'
b.f(); // calls B::f()
return 0;
}
にだから、まずあなたがオブジェクト指向プログラミングのコア原則を理解する必要があり、この修飾子の目的を理解するために、そして特にカプセル化のパラダイム。
これは、簡単なコード例で簡単に説明できるものではありません。
修飾語は、巨大なOOP世界の一部です。
これらの(Java)アクセスタイプは、MySQLまたはデータベースとは何が関係していますか? –
データベース@TimBiegeleisen – r0707637