面向对象的三个特征:封装,继承,多态
属性的封装
package com.bai.demo;
public class Hello {
public static void main(String[] args) {
Person per = new Person();
per.name="李四";
per.age=-10;
System.out.println("我的名字是:"+per.name);
System.out.println("我的年龄是:"+per.age);
}
}
此时的代码在语法上没有错误,但在逻辑上出现了问题,因为一个年龄不可能是负数,出现这一问题的根本原因是外部程序能直接访问Person类中的属性age,如果要让其属性不能被外部访问我们可以用一个关键字来封装属性,这个关键字是”private“表示私有的。
对age使用private,此时发现外部程序不能访问age属性了,提示的错误是”这个属性不可见“,那么如果一个属性不能访问就失去了本身意义,我们应该为这个封装的属性在内部提供方法(接口)来访问该属性,这样的方法需要两个:一个是取得该属性(getter方法),另一个是为该属性赋值(setter方法)。
package com.bai.demo;
public class Person {
String name;
//年龄
private int age;
public void setAge(int myage) {
age=myage;
}
public int getAge() {
return age;
}
}
package com.bai.demo;
public class Hello {
public static void main(String[] args) {
Person per = new Person();
per.name="李四";
per.setAge(-10);//不能访问属性只能访问方法
System.out.println("我的名字是:"+per.name);
System.out.println("我的年龄是:"+per.getAge());
}
}
我的名字是:李四
我的年龄是:-10
在方法中加入判断
package com.bai.demo;
public class Person {
String name;
//年龄
private int age;
public void setAge(int myage) {
if (myage<=0||myage>=200) {//如果传入年龄为负数则为默认值
age=10;
}else {
age=myage;
}
}
public int getAge() {
return age;
}
}
package com.bai.demo;
public class Hello {
public static void main(String[] args) {
Person per = new Person();
per.name="李四";
per.setAge(-10);//不能访问属性只能访问方法
System.out.println("我的名字是:"+per.name);
System.out.println("我的年龄是:"+per.getAge());
}
}
我的名字是:李四
我的年龄是:10
以上就是属性的封装,在开发中一个类的属性基本都要封装,尤其是简单Java类(JavaBean)需要封装,封装之后要为封装的属性提供setter和getter方法。
总结:
1.封装的好处:
可以让程序内部结构更安全
可以把重复的代码封装,之后再需要的地方进行调用,在一定程度上解决了代码的重复
2.今天学习的是封装的最小概念
3.封装的属性要提供setter和getter的方法
4.setter和getter方法的书写规则:
setter方法:set+首写字母大写属性名,没有返回值(void),有参数。
getter方法:set+首写字母大写的属性名,有返回值,没有参数。