java三大特性,封装,继承,多态,本章记录封装的特性
先看一段代码:
学生类的属性
class Student{
String name;
int age;
public void show(){
System.out.println("姓名是:"+name+"---"+"年龄是:"+age);
}
}
class Test{
public static void main(String[] args){
Student s = new Student();
s.name = "张三";
s.age = -18;
s.show();
}
}
编译运行后的结果是:
显然这个结果并不合理,所以我们用封装的方法将年龄的属性封装起来
封装的关键字: private
特点: 对类中的成员变量或成员方法进行私有化设置,外界不能直接访问,只能在本类中访问.
如下举例:
class Student{
private String name;
private int age;
}
class Test{
public static void main(String[] args){
Student s = new Student();
//此时编译会报错
s.name = "张三";
s.age = -18;
}
}
private访问受限:
由于被private修饰的成员变量无法被外界直接访问,所以我们需要对外提供公共的访问方法,用来对用户输入的数据加以限制,达到我们预期的结果.
如下展示:
class Student{
private String name;
private int age;
//name属性的访问方法
public void setName(String n){
name = n;
}
//获取name的方法
public String getName(){
return name;
}
//age属性的访问方法
public void setAge(int a){
if(a < 0 || a > 150){
System.out.println("非法的年龄属性");
}else{
age = a;
}
}
//获取age的方法
public int getAge(){
return age;
}
//展示效果的方法
public void show(){
System.out.println("姓名是:"+name+"---"+"年龄是:"+age);
}
}
//测试类
class Test{
public static void main(String[] args){
Student s = new Student();
s.setName("张三");
s.setAge(-18);
s.show();
}
}
如果此时依旧传入负的年龄值,就会提示"非法的年龄属性"然后输出默认初始化的值
如上方法对age的值进行限制,就可以达到封装的效果.
由于我们在书写代码的时候需要使代码见名知意,所以如上写法
setName(String n){
name = n;
}
serAge(int a){
age = a;
}
的写法不符合代码规则,正确写法:
void setName(String name){
name = name ;
}
void setAge(int age){
age = age;
}
但这么写就会造成如下情况:
原因如下图:
(ps: 方法运行结束会从栈内存中弹栈,因而不存在,书写错误,勿怪…)
所以我们就要一个关键字来区分当前类中的局部变量和成员变量:
this 关键字:
this就是代表当前变量所属类的地址值引用,
使用方法就是 this.变量名!
void setName(String name){
this.name = name;
}
void setAge(int age){
this.age = age;
}
如图所示:
以上就是关于面向对象封装部分的总结,小白刚开始学,如有不足和错误的部分,还请诸位大牛多多指正.