java面向对象的三大特征之封装

面向对象的三大特征
*封装性
*继承性
*多态性

封装性
1.对于事物来说,看不到复杂的一面,只能看到简单的一面。复杂性封装,
对外提供简单的操作入口。例如照相机的实现原理非常复杂,对于使用者来
说却非常的方便简单
2.封装之后才会形成真正的对象,真正的独立体
3.封装就意味着以后的程序可以重复使用,并且这个事物应该适应性强,在
任何场合都可以使用
4.封装之后,对于事物本身,提高了安全性

封装的步骤
1.所有属性私有化,使用private关键字进行修饰,private表示私有的,
修饰的所有数据只能在本类中访问

2.对外提供简单的操作入口,也就是说以后外部程序想要访问age属性,必须
通过这些简单的入口进行访问
*对外提供两个公开的方法,set和get
*想修改age属性,调用set方法
*想读取age属性,调用get方法

3.set方法命名规范
public void set属性名首字母大写(形参){

public viod setAge(int a){
age=a;
}

4.get方法命名规范
public 数据类型 get属性名首字母大写(){

public int getAge(){
return age;
}
属性的访问形式
1.读取属性值:get
2.修改属性值:set

*setter 和 getter方法没有static关键字
*有static关键字修饰的方法怎么调用:类名.方法名(实参)
*没有static关键字修饰的方法怎么调用:引用.方法名(实参)
*一键封装:Alt+shift+s

package encapsulation;

public class Encapsulation {
	//属性私有化
	private int age;
//	public void setAge(int age) {
//		age=age;//java遵循就近原则,这里其实并没有给age赋值,这里的age都是局部变量age
//	}
	
	//setter
	public void setAge(int a) {
		if(a<0 || a>100) {
			System.out.println("您输入的年龄不合法!");
			return;
		}
		age=a;
	}
	//getter
	public int getAge() {
		
		return age;
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		
	}

}

举个例子:
这是一个地址类

package instance;

public class Address {
	int number;
	String city;
	String street;
}

这是一个学生类

package instance;

public class Student {
	
		int age = 20;
		int number;
		boolean sex;
		//Address是一种饮引用型数据类型,addr是一个实例变量
		Address addr;
		
}


所有学生都有学号信息
但每一个学生的学号都不同
所以要访问这个学号必须先创建对象,通过对象去访问学号信息
学号信息不能直接通过’类’去访问,所以这种成员变量被叫做:实例变量/对象变量
如果不创建对象,这个number变量的内存空间是不存在的,只有创建了对象,这个number变量才会有内存空间
在java语言中,程序员不能直接操作对内存,java中没有指针

这是关于封装的使用

package instance;
/*
 	面向对象的三大特征
 		*封装
 		*继承
 		*多态
 	面向对象的方式开发软件
 		*面向对象的分析:OOA
 		*面向对象的设计:OOD
 		*面向对象的编程:OOP
 	什么是类
 		对象之间具有共同特征,抽象总结出一个模板,这个模板称为类
 		类描述的是状态+动作
 		状态——>一个类的属性
 		动作——>一个类的方法
 	什么是对象(实例/instance)
 		现实世界实际存在
 	
 	类-【实例化】->对象
 	对象-【抽象】->类
 */

import encapsulation.Encapsulation;

/*
 	类的定义
 		语法结构:
 			[修饰符列表] class 类名{
 				//属性;
 				int age;
 				int numbel;
 				boolean sex;
 				String address;
 				方法;
 			}
 */
public class Instance {
	// 定义一个类,起名学生

	public static void main(String[] args) {
		// new用来创建对象,在JVM堆内存中开辟空间
		/*
		 * 方法区内存:class字节码文件 栈内存:方法压栈,局部变量 堆内存:new的对象
		 */
		Student s = new Student();// S是局部变量【引用】,new Student是一个学生对象
		// 引用是保存了对象地址的的变量
		/*
		 * 访问实例变量的语法格式 读取数据:引用.变量名 修改数据:引用.变量名 = 值
		 */
		int stunum = s.number;
		int stuage = s.age;
		boolean stusex = s.sex;
		Address a = new Address();// a也是局部变量
		s.addr = a;
		// System.out.println(stusex);
		// s.age = 16;
		System.out.println(stuage);
		System.out.println(s.age);
		s.age = 16;
		System.out.println(stuage);
		System.out.println(s.age);
		stuage = s.age;
		System.out.println(stuage);
		System.out.println(s.age);
		s.age = 17;
		System.out.println(stuage);
		System.out.println(s.age);

		// 对象的嵌套使用【跨文件】
		System.out.println(s.addr);
		System.out.println(s.addr.city);
		System.out.println(a.city);

		// 对象的嵌套使用【本文件】
		home shao = new home();
		bed huihui = new bed();// 类名 引用
		shao.mianJi = 200.345;
		shao.weiZhi = "Ordes";
		shao.bedd = huihui;
		// huhui = shao.bedd;
		huihui.tiJi = 234.234;
		huihui.caiZhi = "mutou";
		System.out.println(shao.bedd.caiZhi);
		System.out.println(huihui.tiJi);
		System.out.println(shao.mianJi);
		shao.bedd = new bed();// 引用.变量名
		bed huhu = new bed();
		shao.bedd = huhu;
		huhu.tiJi = 30.67;
		System.out.println(huihui.tiJi);
		System.out.println(huihui.caiZhi);
		System.out.println(shao.bedd.tiJi);// 空指针
		System.out.println(shao.bedd.caiZhi);// 空指针
		System.out.println(huhu.tiJi);
		
		//面向对象的封装性
		Encapsulation syh = new Encapsulation();
		//编译报错,该age不可视
		//私有的属性不能在外部直接访问,这就是封装
		//System.out.print(syh.age);
		System.out.println(syh.getAge());
		//修改
		syh.setAge(100);
		//读取
		System.out.println(syh.getAge());
	}
}

class home {
	double mianJi;
	String weiZhi;
	bed bedd;
}

class bed {
	double tiJi;
	String caiZhi;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值