面向对象——封装与隐藏

本文详细介绍了面向对象编程中的封装概念,强调了高内聚和低耦合的重要性,以及如何通过权限修饰符实现数据隐藏和接口公开。同时,解释了构造器的作用,包括对象创建和初始化,并讨论了构造器的重载和默认构造器的规则。此外,还提到了属性赋值的顺序,从默认初始化到构造器中赋值的过程。

1.封装:

 ①高内聚:类的内部数据操作细节自己完成,不允许外部的干涉。

②低耦合:仅对外暴露少量的方法用于使用。

隐藏对象内部的复杂性,只是对外公开简单的接口(api)。用于外界调用,从而提高系统的可扩展性、可维护性。

2.我们将类的属性XXX私有化(private),同时提供公共的(public)方法来获取(getXxx)和设置(setXxx)的拓展,封装性的体现。

3.封装性的体现,需要权限修饰符来配合。

java规定的四种权限(从小到大排序):private、缺省、protected、 public。均可以用来修饰类及内部结构:属性、方法、构造器、内部类。

注:修饰类只能用缺省和public

4.构造器 

1)创建对象:创建类的对象 = new + 构造器

①如果没有显式的定义类的构造方法,则系统默认提供一个空参的构造器

②定义构造器的格式:权限修饰符,类名(形参列表){}

2)初始化对象的信息

 ①一个类中定义的多个构造器,彼此构造成重载。

②一旦我们显式的定义了类的构造器之后,系统就不再提供默认的空参构造器。

③一个类中至少有一个构造器。 

 属性赋值的先后顺序  1.默认初始化>2.显示初始化>3.构造器中赋值>4.通过“对象.方法”或者“对象。属性”的方式赋值。

### 封装 封装面向对象编程的基本特性之一,其核心思想是将数据和行为绑定在一起,并对外部隐藏实现细节。通过使用访问修饰符(如 `private`、`protected` 和 `public`),可以控制类成员的可见性。封装提高了代码的安全性和可维护性,因为外部代码只能通过定义好的接口对象交互,而无法直接访问或修改对象内部状态[^3]。 例如,一个类可以将某些变量设为私有,并通过公共方法(getter 和 setter)来访问或修改这些变量: ```java public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` ### 继承 继承是面向对象编程中实现代码复用的重要机制。它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类不仅可以复用父类的代码,还可以扩展或修改父类的行为。继承的语法如下: ```java public class Animal { public void speak() { System.out.println("Animal speaks"); } } public class Dog extends Animal { @Override public void speak() { System.out.println("Dog barks"); } } ``` 在上述代码中,`Dog` 类继承了 `Animal` 类,并重写了 `speak()` 方法以提供自己的实现。继承的好处包括代码重用、逻辑组织和扩展性。通过建立类之间的层次结构,代码变得更加清晰和易于维护[^3]。 在继承中,子类可以重写或隐藏父类的方法。重写是指子类提供父类相同方法签名(方法名、参数列表和返回值类型)的方法,以改变方法的行为。隐藏是指子类定义父类相同的静态方法,以覆盖父类的实现。`super` 关键字用于调用父类的方法或构造函数,而 `final` 关键字可以防止类被继承或方法被重写[^1]。 ### 多态 多态是面向对象编程的核心特性之一,它允许不同类的对象对同一消息做出不同的响应。要实现多态,必须满足以下条件:必须在继承体系下,子类必须重写父类的方法,并且通过父类的引用调用子类重写的方法。多态的体现是在代码运行时,根据传递的对象类型,调用对应类中的方法[^2]。 例如: ```java public class Animal { public void speak() { System.out.println("Animal speaks"); } } public class Dog extends Animal { @Override public void speak() { System.out.println("Dog barks"); } } public class Cat extends Animal { @Override public void speak() { System.out.println("Cat meows"); } } public class Main { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.speak(); // 输出 "Dog barks" animal2.speak(); // 输出 "Cat meows" } } ``` 在上述代码中,`animal1` 和 `animal2` 都是 `Animal` 类型的引用,但它们分别指向 `Dog` 和 `Cat` 对象。在运行时,根据实际对象的类型,调用对应类中的 `speak()` 方法。这种机制使得代码更加灵活,能够根据不同的对象执行不同的行为。 ### 相关问题 1. 封装面向对象编程中的作用是什么? 2. 继承的语法和关键字有哪些? 3. 多态的实现条件和应用场景是什么? 4. 方法重写和方法重载的区别是什么? 5. 如何通过继承实现代码重用?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值