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对象的私有方法
    }
}

 

相关文章
|
3月前
|
安全 Java API
Java 17 + 特性与现代开发技术实操应用详解
本指南聚焦Java 17+最新技术,涵盖模块化开发、Record类、模式匹配、文本块、Stream API增强、虚拟线程等核心特性,结合Spring Boot 3与Micronaut框架实战。通过实操案例解析现代Java开发技术栈,包括高性能并发编程、GraalVM原生编译及开发工具链配置。同时梳理面试高频考点,助力掌握Java新特性和实际应用,适合学习与项目实践。代码示例丰富,附带完整资源下载链接。
336 0
|
4月前
|
存储 缓存 Java
【高薪程序员必看】万字长文拆解Java并发编程!(5):深入理解JMM:Java内存模型的三大特性与volatile底层原理
JMM,Java Memory Model,Java内存模型,定义了主内存,工作内存,确保Java在不同平台上的正确运行主内存Main Memory:所有线程共享的内存区域,所有的变量都存储在主存中工作内存Working Memory:每个线程拥有自己的工作内存,用于保存变量的副本.线程执行过程中先将主内存中的变量读到工作内存中,对变量进行操作之后再将变量写入主内存,jvm概念说明主内存所有线程共享的内存区域,存储原始变量(堆内存中的对象实例和静态变量)工作内存。
148 0
|
2月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
120 1
|
2月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
144 1
|
2月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
98 2
|
2月前
|
存储 Java 测试技术
Java基础 - 面向对象
面向对象编程是Java的核心,包含封装、继承、多态三大特性。封装隐藏实现细节,提升代码可维护性与安全性;继承实现类间IS-A关系,支持代码复用;多态通过继承、重写与向上转型,实现运行时方法动态绑定,提升系统扩展性与灵活性。
|
4月前
|
人工智能 Java 编译器
Java:面向对象
本文介绍了Java编程中的核心概念,包括包的命名规范与自动导入机制、构造方法的特点与使用、`this`和`super`关键字的作用、继承的基本规则、访问权限的设置、封装的意义、多态的实现原理以及`static`关键字的用法。通过详细解析每个知识点,并结合代码示例,帮助读者深入理解Java面向对象编程的核心思想与实践技巧。内容适合初学者及进阶开发者学习参考。
111 0
|
IDE Java 关系型数据库
Java14发布,16大新特性,代码更加简洁明快
Java14发布,16大新特性,代码更加简洁明快
376 0
Java14发布,16大新特性,代码更加简洁明快

热门文章

最新文章