ホームページ  >  記事  >  Java  >  01.Javaの基礎 - カプセル化

01.Javaの基礎 - カプセル化

黄舟
黄舟オリジナル
2017-02-27 10:08:051287ブラウズ

基本概念

Java オブジェクト指向には、カプセル化、継承、ポリモーフィズムという 3 つの主要な機能があります。カプセル化と継承は基本的にポリモーフィズムに役立ちます。

カプセル化: オブジェクトのプロパティと操作 (またはサービス) を独立した全体に結合し、オブジェクト内の実装の詳細を可能な限り隠します。平たく言えば、クラスのメンバー変数をプライベート化し、これらのメンバー変数にアクセスするためのパブリックメソッドを提供することを意味します。

データの隠蔽: メンバー変数がプライベート メンバーとして宣言されている場合、外部クラスを介して直接アクセスすることはできないため、メンバー変数はクラス内に隠蔽されます。このため、カプセル化はデータ隠蔽とも呼ばれます。


JavaBean

JavaBean は、適切なカプセル化仕様を規定する仕様であり、そのクラスが仕様に準拠している限り、それは JavaBean と呼ばれます。

次の特徴があります:

  • データメンバー (オブジェクトメンバー) は private によって変更される必要があります。

  • 各オブジェクトメンバーにパブリックセッター/ゲッターメソッドを提供します

  • セッター/ゲッターのプロトタイプは次のようにする必要があります:

public void set 成员名(成员类型 arg);public 成员类型 get 成员名();

サンプルスタディ

1. 最初にカプセル化されていないメンバー変数を見てみましょう:

class Person{    // 将成员的访问权限设置为 public,这也为意味这谁都访问到它
    public String name;    public int age;
}public class Test{
    public static void main(String[] args) {
        Person person = new Person();        //通过类,我们可以直接操作成员变量
        person.name ="kobe";
        person.age =1000;        //直接获得成员变量的值
        System.out.println(person.name+"-"+person.age);
    }
}

次に、上記のクラスをカプセル化します:

class Person {    //1.将成员变量私有化,这样一来外部就不能直接访问到它们
    private String name;    private int age;    //2.提供公共的方法来操作成员变量
    public String getName() {        return name;
    }    public void setName(String name) {        this.name = name;
    }    public int getAge() {        return age;
    }    public void setAge(int age) {        this.age = age;
    }
}public class Test {
    public static void main(String[] args) {
        Person person = new Person();        // 不能直接访问成员变量,而是通过提供的公共方法来设置/获取成员变量的值
        person.setName("kobe");
        person.setAge(1000);
        System.out.println(person.getName() + "-" + person.getAge());
    }
}

これまで、カプセル化されたオブジェクトとカプセル化されていないオブジェクトの一般的な違いを見てきました:

    カプセル化されていないオブジェクトの場合、それらのオブジェクトに直接アクセス/設定します。メンバー変数
  • そして、カプセル化されたオブジェクトの場合、提供されたパブリックメソッド(ゲッター/セッターなど)を通じてメンバー変数を操作する必要があります
2.
カプセル化されたコントロールオブジェクト

このように、カプセル化は次に、カプセル化を通じてオブジェクトを制御する方法を見てみましょう:

class Person {    
private String name;    
private int age;    
private int city;    
//对于 name 的控制,直接取消了 setter 方法,这样外部只能访问,而不能设置 name 的值
    public String getName() {        
    // 直接返回值
        return "kobe";
    }    public int getAge() {        
    return age;
    }    
    // 有两个 setter 方法,可以接收 int,String 类型的参数
    public void setAge(int age) {        
    this.age = age;
    }    public void setAge(String age) {        
    // 对参数值进行验证,默认只能输入数字
        if(age.matches("[0-9]")){            
        this.age = Integer.valueOf(age);
        }else{
            System.out.println("Error:年龄只能为数字");
        }
    }    
    // 在日常开发,我们一般会将文字转换成编码在数据库存储,因此在存储调用时就要做转换
    public String getCity() {        
    switch (city) {        
    case 001:            
    return "北京";        
    default:            
    return "上海";
        }
    }    
    public void setCity(String city) {        
    if("北京".equals(city)){            
    this.city = 001;
        }else if("上海".equals(city)){            
        this.city = 002;
        }else{
            System.out.println("Error:没有找到该城市");
        }
    }
}public class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.setAge("a"); //Error:年龄只能为数字
        person.setAge(1000); //既可以接收 String 类型,也可以接收 int 类型
        person.setCity("广州"); //Error:没有找到该城市
        person.setCity("北京"); //此时已经被转换成 001 存储了    

        //在访问 city 成员变量时,001 又被转换成 北京 显示
        System.out.println(person.getName()+"-"+person.getAge()+"-"+person.getCity());
    }
}

上記のコードを通じて、カプセル化の役割を大まかに要約できます:

    良いカプセル化は結合を減らすことができます。
  • クラス内の構造は自由に変更できます。
  • を使用すると、メンバーをより正確に制御できます。
  • 情報を非表示にし、詳細を実装します。

参考

  • http://www.php.cn/java-article-351262.html

  • 上記は01.Javaの基礎 - カプセル化、その他関連の内容ですcontent PHP 中国語 Web サイト (www.php.cn) にご注意ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。