Java——面向对象三大特性1(封装)

简介: 面向对象三大特性指的是:封装、继承、多态。这三大特性支撑了整个面向对象的理论体系,是面向对象的核心。

面向对象三大特性指的是:封装、继承、多态。这三大特性支撑了整个面向对象的理论体系,是面向对象的核心。

1 封装

class CreditCard{
    String password = “123456”;
}
public class TestCreditCard{
    public static void main(String args[]){
        CreditCard card = new CreditCard();
        System.out.println(card.password);
        card.password = “000000”;
        System.out.println(card.password);
    }
}

上述代码,创建了一个信用卡对象,并且读取、修改了这个对象的 password 属性。从 Java 基本语法上说,这并没有问题。但是对于生活来说,这就是一个大问题!对于信用卡对象而言,它的密码属性是不应该被随便访问和修改的。面向对象中解决这个问题,可以采用封装的特性。封装指的是,任何对象都应该有一个明确的边界,这个边界对对象内部的属性和方法起到保护的作用。


1.1 属性的封装


为上述的 CreditCard 的 password 属性增加 private 关键字,如下:

class CreditCard{
private String password = “123456”;
}

则原有代码中会出现编译错误:

public class TestCreditCard{
public static void main(String args[]){
    CreditCard card = new CreditCard();
    System.out.println(card.password); //编译错误
    card.password = “000000”; //编译错误
    System.out.println(card.password); //编译错误
    }
}


当为属性增加 private 之后,这个属性就成为了一个私有属性。所谓私有,指的是该属性只能在本类内部访问。


这就相当于,card 对象的边界对于 password 属性起到了保护的作用,任何试图越过边界,访问 password 属性的企图都会被阻止。


然而,对于用户而言,依然有可能要访问 CreditCard 的密码。例如,在生活中,如果忘了银行卡密码,我们可以凭借证件到银行去查询或重设密码。对于这方面的需求,我们为 CreditCard 提供一对 get/set 方法。这两个方法的修饰符为“public”。用 public 修饰的属性和方法表示“公开的”,公开属性和方法不受对象边界的限制,在类的内部和外部都可以访问。代码如下:

class CreditCard{
    private String password = “123456”;
    public void setPassword(String password){
        this.password = password;
}
    public String getPassword(){
        return this.password;
    }
}

则 TestCreditCard 类可以改成:

public class TestCreditCard{
public static void main(String args[]){
    CreditCard card = new CreditCard();
    System.out.println(card.getPassword() );
    card.setPassword(“000000”);
    System.out.println(card.getPassword());
    }
}

把属性作为私有,并提供相应的 get/set 方法,最重要的概念在于:控制。由于不能直接访问属性,而必须通过 get/set 方


法访问属性,因此可以在 get/set 方法上做手脚,来控制他人对对象属性的访问。


例如,希望 password 属性只能被获取,不能被改写。如果 password 属性用 private 修饰的话,可以只提供 get 方法而不提供 set 方法,这样 password 就成为了只读属性。而如果不把 password 做成私有,则无法达到“只读”的效果。


1.2 方法的封装


我们在设计一个类的时候,会为这个类设计很多方法。有些方法应该做成 public 方法,以供其他对象来调用,而有些方法只供自身调用,不作为对象对外暴露的功能,就应该做成private 方法。例如,一个老师对象,拥有一个“讲课”方法,这个方法必须暴露出来,供学生对象来调用(老师从来不会讲课给自己听),因此这个方法应该是公开的。同时,老师作为一个人,还拥有“消化食物”方法,这个方法只供老师自己来调用,对别人是无益的,因此,应该是一个私有方法。

class MyClass{
    public void method1(){}
    private void method2(){}
}
    public class TestPrivateMethod {
    public static void main(String[] args) {
        MyClass mc = new MyClass();
        mc.method1(); // 正确,method1方法为公开的,可以在类外面访问
        mc.method2(); // 编译失败,不能访问mc对象的私有方法
    }
}

 

相关文章
|
7天前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。
|
7天前
|
安全 网络协议 Java
Java网络编程封装
Java网络编程封装原理旨在隐藏底层通信细节,提供简洁、安全的高层接口。通过简化开发、提高安全性和增强可维护性,封装使开发者能更高效地进行网络应用开发。常见的封装层次包括套接字层(如Socket和ServerSocket类),以及更高层次的HTTP请求封装(如RestTemplate)。示例代码展示了如何使用RestTemplate简化HTTP请求的发送与处理,确保代码清晰易维护。
|
29天前
|
Java
Java 面向对象编程的三大法宝:封装、继承与多态
本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
105 15
|
2月前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
2月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
102 6
|
2月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
36 1
|
3月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
36 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
3月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
50 4
|
3月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
61 2
|
4月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
170 3

热门文章

最新文章