Heim  >  Artikel  >  Java  >  01.Java-Grundlagen – Kapselung

01.Java-Grundlagen – Kapselung

黄舟
黄舟Original
2017-02-27 10:08:051287Durchsuche

Grundkonzepte

Java objektorientiert hat drei Hauptmerkmale: Kapselung, Vererbung, Polymorphismus. Kapselung und Vererbung dienen grundsätzlich dem Polymorphismus.

Kapselung : Sie kombiniert die Eigenschaften und Operationen (oder Dienste) eines Objekts zu einem unabhängigen Ganzen und verbirgt die Implementierungsdetails so weit wie möglich im Objekt. Laienhaft ausgedrückt bedeutet dies, die Mitgliedsvariablen der Klasse zu privatisieren und öffentliche Methoden für den Zugriff auf diese Mitgliedsvariablen bereitzustellen.

Ausblenden von Daten: Wenn eine Mitgliedsvariable als privates Mitglied deklariert ist, kann nicht direkt über die externe Klasse auf sie zugegriffen werden, wodurch die Mitgliedsvariable innerhalb der Klasse ausgeblendet wird. Aus diesem Grund wird die Kapselung auch als Data Hiding bezeichnet.


JavaBean

JavaBean ist eine Spezifikation, die eine gute Kapselungsspezifikation vorschreibt. Solange die Klasse der Spezifikation entspricht, wird sie JavaBean genannt.

Es hat die folgenden Eigenschaften:

  • Datenmitglieder (Objektmitglieder) müssen durch private geändert werden.

  • Stellen Sie öffentliche Setter/Getter-Methoden für jedes Objektmitglied bereit

  • Der Prototyp des Setter/Getters muss sein:

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

Fallstudie

1. Ungekapselt und gekapselt

Lassen Sie uns zunächst einen Blick in die Zukunft werfen Gekapselte Mitgliedsvariablen:

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);
    }
}

Als nächstes kapseln wir die obige Klasse:

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());
    }
}

Bisher haben wir den allgemeinen Unterschied zwischen gekapselten und nicht gekapselten Objekten gesehen:

  • Für nicht gekapselte Objekte greifen wir direkt auf ihre Mitgliedsvariablen zu bzw. legen diese fest

  • Und für gekapselte Objekte müssen wir die bereitgestellten öffentlichen Methoden (z. B. Getter/Setter) verwenden, um Member zu bedienen Variablen


2.Kapseln Sie das Kontrollobjekt

Wenn es einfach so ist, scheint die Kapselung keine Auswirkung zu haben Wir schauen uns an, wie man Objekte durch Kapselung steuert:

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());
    }
}

Mit dem obigen Code können wir die Rolle der Kapselung grob zusammenfassen:

  • Eine gute Kapselung reduziert die Kopplung.

  • Die Struktur innerhalb der Klasse kann frei geändert werden.

  • ermöglicht eine genauere Kontrolle über Mitglieder.

  • Informationen ausblenden und Details implementieren.


Referenz

Das Obige ist der Inhalt von 01.Java Basics - Encapsulation. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php. cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn