search
HomeJavajavaTutorial01.Java Basics - Encapsulation

01.Java Basics - Encapsulation

Feb 27, 2017 am 10:08 AM

Basic concepts

Java object-oriented has three major features: Encapsulation, inheritance, and polymorphism. Encapsulation and inheritance basically serve polymorphism.

Encapsulation (Encapsulation): It is to combine the properties and operations (or services) of the object into an independent whole, and hide the implementation details inside the object as much as possible. In layman's terms, it means privatizing the member variables of the class and providing public methods to access these member variables.

Data hiding: If a member variable is declared as a private member, then it cannot be directly accessed through the external class, thus hiding the member variable inside the class. For this reason, encapsulation is also called data hiding.


JavaBean

JavaBean is a specification that stipulates a good encapsulation specification. As long as the class conforms to the specification, it is called a JavaBean.

It has the following characteristics:

  • Data members (object members) must be modified by private.

  • Provide public setter/getter methods for each object member

  • The prototype of the setter/getter must be:

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

Example study

1. Unencapsulated & Encapsulated

First let’s look at the unencapsulated Member variables:

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

Let’s encapsulate the above class:

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

So far we have seen the general difference between encapsulated and unencapsulated objects:

  • For unencapsulated objects, we directly access/set their member variables

  • And for encapsulated objects, we need to operate members through the provided public methods (such as getters/setters) Variables


2.Encapsulation control object

If it is just like this, encapsulation seems to have no effect. Let’s take a look next How to control objects through encapsulation:

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

Through the above code, we can roughly summarize the role of encapsulation:

  • Good encapsulation can reduce coupling.

  • The structure inside the class can be modified freely.

  • Can have more precise control over members.

  • Hide information and implement details.


Reference

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

The above is the content of 01.Java Basics - Encapsulation. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!



Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?Mar 17, 2025 pm 05:46 PM

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.

How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?Mar 17, 2025 pm 05:44 PM

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?Mar 17, 2025 pm 05:43 PM

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

How does Java's classloading mechanism work, including different classloaders and their delegation models?How does Java's classloading mechanism work, including different classloaders and their delegation models?Mar 17, 2025 pm 05:35 PM

Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Atom editor mac version download

Atom editor mac version download

The most popular open source editor