/*封装概述和使用*/
例子:
/*
定义一个学生类
成员变量:name age
成员方法:show()方法
我们在使用这个案例的过程,发现了一个问题
通过对象去给成员变量赋值,可以赋值一些非法的数据。
这是不合理的。
应该是:在赋值之前,先对数据进行判断。
判断在那里做比较合适呢?
StudentDome类是一个测试类,测试类一般只创建对象,调用方法
所以,这个判断应该定义在Student类中
在成员变量的位置是不可以进行判断的,因为做数据校验,必须依靠一些逻辑语句
逻辑语句是应该定义在方法中的,所以我们最终决定在Student类中提供一个方法
来对数据进行校验
当我们直接赋值和通过方法给值时,它没有使用方法给值,直接赋值
我们要求必须使用方法,而不能直接调成员变量赋值
怎么去强制要求不能直接使用成员变量
针对这种情况,Java就提供了一个关键字:private
private:私有的。可以修饰成员变量和成员方法
注意:被private修饰的成员只能在本类中直接访问
其实这是一个封装的思想
*/
class Student{
//姓名
String name;
//年龄
private int age;
//写一个方法对数据进行校验
/*
返回值类型:void
参数类型:int a
*/
public void SetAge(int a ){
if (a < 0 || a > 120){
System.out.println("给的年龄有问题");
}else{
age = a;
}
}
//show()方法,显示所用的学生数据
public void show(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
}
class StudentDome{
public static void main(String[] args){
//创建学生类
Student s = new Student();
//给成员变量赋值
s.name="天龙八部";
s.age=100000;//数据不合理
//通过方法给值
s.SetAge(27);
s.show();
}
}
/*
封装:是指隐藏对象的属性和实现细节,仅提供公共访问方式
封装的好处;
A;隐藏实现细节,提供公共的访问方式
B: 提高了代码的复用性
C:提高了安全性
封装的原则;
将不需要对外提供的内容都隐藏起来
把属性隐藏,提供公共方法对其访问
private 关键字
是一个权限修饰符
可以修饰成员(成员方法和成员变量)
被其修饰的成员只能在被类中访问
*/
例子:
class Dome{
//int num = 10;
//用private修饰
private int num = 10;
public void show(){
System.out.println(num);
}
private void method(){
System.out.println("method");
}
public void function(){
methon();
}
}
class PrivateDome{
public static void mian(String[] args){
Dome d= new Dome;
System.out.println(d.num);
d.method();//不可调用,被private封装
//需要公共方法才可以输出
d.function();//这才可以调用
}
}
/*private最常见的应用
A: 把成员变量用private修饰
B:提供对应getXxx()/setXxx()方法
*/
标准代码例子:
//定义学生类
class Student{
//名字
private String name;
//年龄
private int age;
//名字获取值
public string getName(){
return name;
}
//名字赋值
public void setName(String n ){
name = n;
}
//年龄获取值
public int getAge(){
return age;
}
//年龄赋值
public void setAge(int a ){
age = a ;
}
}
class StudentDome{
public static void main(String[]){
//创建学生对象
Student s = new Student;
s.setName("李志钦");
s.setAge(19);
System.out.println(s.getName();+"----"+s.getAge());
}
}
关键字 this
/*
关键字 this
this:是当前类的对象引用。它就代表当前类的一个对象
注意:谁调用这个方法,在该方法内部的this就代表谁
使用this的场景;
解决局部变量隐藏成员变量
其他用法后面和super一起讲解
*/
最后标准代码
class Student{
//名字
private String name;
//年龄
private int age;
//名字获取值
public String getName(){
return name;
}
//名字赋值
public void setName(String name ){
this.name = name;
}
//年龄获取值
public int getAge(){
return age;
}
//年龄赋值
public void setAge(int age ){
this.age = age ;
}
}
class StudentDome{
public static void main(String[] args){
//创建学生对象
Student s = new Student();
s.setName("李志钦");
s.setAge(19);
System.out.println(s.getName()+"----"+s.getAge());
}
}
Java封装概述和使用
最新推荐文章于 2024-08-09 09:30:00 发布