黑马程序员_面向对象之封装

本文介绍Java面向对象的基本概念,包括面向对象与面向过程的区别、类与对象的关系、成员变量与局部变量的区别等,并通过实例演示如何使用封装来保护类的内部状态。

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流------

面向对象思想
面向过程:关注的是步骤和过程
面向对象:关注的是对象
面向对象是基于面向过程的
面向对象的特点:
a: 是一种更符合人们思考习惯的思想
b: 把复杂的事情简单化了
c: 从执行者变成指挥者
类与对象以及引用
事物
属性 成员变量 
行为 成员方法
属性: 就是事物的描述信息
行为: 就是该事物可以做到事情
成员变量: 和之前定义变量一样,只不过位置不同. 在类中方法外
成员方法: 和之前定义方法一样,只不过去掉static
类: 就是一组相关属性和行为的集合,是一个抽象的东西
对象: 就是该类的一个具体体现
使用类:
创建对象: 格式:  类名 对象名 = new 类名();
访问成员变量的格式:  对象名.变量名 ;
访问成员方法的格式:  对象名.方法名(...)
局部变量和成员变量的区别
a: 在类中的位置不同
局部变量: 方法定义中或者方法声明上的变量
成员变量: 在类中方法外
b: 在内存中的位置不同
局部变量: 在栈内存
成员变量: 在堆内存
c: 生命周期不同:
局部变量: 随着方法的调用而产生,随着方法的消失而消失
成员变量: 随着对象的创建而产生,随着对象的消失而消失
d: 默认值的问题:
成员变量: 有默认值(系统给定)
局部变量: 没有默认值,必须先赋值,然后在使用

变量的访问注意事项:
a: 局部变量可以和成员变量的名称一致
b: 变量在访问的时候遵循"就近原则"
java语言的参数传递问题

基本数据类型参数传递,形式参数的改变对实际参数没有影响
引用数据类型的参数传递,形式参数的改变对实际参数是有直接影响的
java语言中只有值传递 ,没有址传递.
一个方法上如果形式参数是类类型的变量,我们如何调用?
如果以后看到某一个方法上的形式参数是一个类类型的变量,那么在调用的时候需要传递一个该类的对象
匿名对象
匿名对象: 没有名字的对象
Student s = new Student();
// 匿名对象
new Student();
作用:
a: 调用方法,仅仅调用一次
b: 作为参数传递

class Student {

	public void show(){
		System.out.println("student的show方法被调用了");
	}

}

class StudentDemo {

	public void method(Student s){
		s.show();
	}

}

// 测试类
class NoNameTest {

	public static void main(String[] args){
	
		// 创建Student对象
		Student s = new Student();

		// 调用show方法
		s.show();
		// s.show();

		System.out.println("---------------------------");

		// 匿名对象
		// new Student();

		new Student().show();
		// new Student().show();		重新创建了一个对象和之前不一样

		System.out.println("---------------------------");

		// 创建StudentDemo对象
		// StudentDemo sd = new StudentDemo();

		// 调用method方法
		// sd.method(s);

		// 把匿名对象作为参数传递
		// sd.method(new Student());

		new StudentDemo().method(new Student());
	}

}

封装(private)
封装的思想:
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装好处
隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。
封装原则
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问。
private特点:
a: private是一个修饰符
b: private可以修饰成员变量也可以修饰成员方法
c: 被private修饰的成员只能在本类中使用
运用private练习:

// 学生类
class Student {
	
	// 成员变量
	private String name ;	// 姓名
	private int		age ;	// 年龄
	private String sex ;	// 性别

	// 成员方法getXxx和setXxx方法
	public void setName(String n){
		name = n ;
	}

	public String getName(){
		return name ;
	}
	
	public void setAge(int a){
		age = a ;
	}
	
	public int getAge(){
		return age ;
	}

	public void setSex(String s){
		sex = s ;
	}

	public String getSex(){
		return sex ;
	}
	
	// 成员方法
	public void show(){
		System.out.println(name + "----" + age + "----" + sex);
	}

}

// 测试
class StudentTest {

	public static void main(String[] agrs){
		
		// 创建学生对象
		Student s = new Student();

		// 给成员变量赋值
		s.setName("小强");
		s.setAge(24);
		s.setSex("男");

		// 输出成员变量的值
		// 调用show方法
		s.show();

		// 通过get方法获取
		System.out.println(s.getName() + "----" + s.getAge() + "---" + s.getSex());

	}
}

***********重点掌握**************

this关键字
this关键字:  代表的是本类对象的一个引用,谁调用我方法中的this就代表谁.
this存在的解决的问题:
就是局部变量隐藏了成员变量的时候,我们可以通过this来明确访问的是成员变量



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值