封装的含义

本文介绍了Java中的封装概念,详细解释了如何通过private、protected、default及public四种访问控制符来实现属性的隐藏与方法的暴露,同时给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现良好的封装,需要从两个方面考虑:
1 将对象的属性和实现细节隐藏起来,不允许外部直接访问。

2 把方法暴露出来,让方法来操作或访问这些属性。




四个访问控制符
1 private访问控制级别:如果类里的一个成员(包括属性和方法)使用private访问控制符来修饰,
则这个成员只能在该类的内部被访问,很显然,这个访问控制符用于修饰属性最合适,使用它来修饰属性就
可以把属性隐藏在类的内部。

2 default访问控制权限:如果类里的一个成员(包括属性和方法)或者一个顶级类不使用任何访问控制
符修饰,我们就称它是默认访问控制,default访问控制的成员或顶级类可以被相同包下其他类访问。

3 protected访问控制权限(子类访问控制权限):如果一个成员(包括属性和方法)使用protected
访问控制符修饰,那么这个成员既可以被同一个包中其他类访问,也可以被不同包中的子类访问,通常情况下,
如果使用protected来修饰一个方法,通常是希望子类来重写这个方法。

4 public访问控制权限(公共访问权限):这个是最宽松的访问控制级别,可以访问任何。

package Agu3th;

public class Person {
	private String name;
	private int age;
	public void setName(String name)
	{
		if(name.length() > 6 || name.length() < 2)
		{
			System.out.println("您设置的人名不符合要求");
			return;
		}
		else
		{
			this.name = name;
		}
	}
	public String getNmae()
	{
		return this.name;
	}
	public void setAge(int age)
	{
		if(age > 100 || age < 0)
		{
			System.out.println("您设置的年龄不合法");
			return;
		}
		else
		{
			this.age = age;
		}
	}
	public int getAge()
	{
		return this.age;
	}
	public static void main(String[] args) {
		
	}

}


定义了上面的Person类之后,该类的name和age属性只能在Person类内才可以操作和访问,在Person类之外只能
通过各自对应的setter和getter方法来操作和访问他们。
java中属性的setter和getter方法有非常重要的意义,如果一个Java类的每个属性都被使用private修饰,并为
每个属性都提供了public修饰setter和getter方法,这个类就是一个符合javaBean规范的类。

关于访问控制符的使用,规则如下:
1 类里的绝大部分属性都应该使用private修饰,除了一些static修饰的,类似全局变量的属性,才可能考虑使用public
修饰,除此之外,有些方法只是用于辅助是吸纳该类的其他方法,这些方法被称为工具方法,工具方法应该使用private修饰。

2 如果某一个类主要用做其他类的父类,该类里包含的大部分方法可能仅仅希望被其子类重新,而不想被外界直接调用,则应该使用
protected修饰这些方法。

3 希望暴露出来给其他类自由调用的方法应该使用public修饰,因此,类的构造器通过使用public修饰,暴露给其他类中创建
的对象,因为顶级类通常都希望被其他类自由使用,所以大部分顶级类都是public修饰。

封装、继承和多态是面向对象编程中的三个重要概念。 1. 封装(Encapsulation):封装是指将数据和操作数据的方法封装在一起,形成一个类。通过封装,我们可以隐藏类的内部实现细节,只暴露出对外的接口,提高了代码的安全性和可维护性。 2. 继承(Inheritance):继承是指一个类可以继承另一个类的属性和方法。通过继承,子类可以直接使用父类的属性和方法,同时还可以在子类中添加新的属性和方法,实现代码的复用和扩展。 3. 多态(Polymorphism):多态是指同一个方法可以根据不同的对象调用出不同的行为。通过多态,我们可以在不改变方法的情况下,根据不同的对象调用相同的方法,实现了代码的灵活性和可扩展性。 在Python中,封装通过类的定义来实现,继承通过在子类的类名后面加上父类的类名来实现,多态则是Python的一种动态类型语言特性,不需要显式声明。 以下是一个示例代码,演示了Python中的封装、继承和多态的含义: ```python # 封装 class Animal: def __init__(self, name): self.name = name def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" dog = Dog("Buddy") cat = Cat("Kitty") print(dog.speak()) # 输出:Woof! print(cat.speak()) # 输出:Meow! # 继承 class Person: def __init__(self, name): self.name = name def say_hello(self): print("Hello, my name is", self.name) class Student(Person): def __init__(self, name, grade): super().__init__(name) self.grade = grade def say_hello(self): super().say_hello() print("I am in grade", self.grade) person = Person("John") student = Student("Alice", 10) person.say_hello() # 输出:Hello, my name is John student.say_hello() # 输出:Hello, my name is Alice\nI am in grade 10 # 多态 def make_sound(animal): print(animal.speak()) dog = Dog("Buddy") cat = Cat("Kitty") make_sound(dog) # 输出:Woof! make_sound(cat) # 输出:Meow! ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值