面向对象三个特征:封装,继承,多态。(都是什么样的表现形式?)
其中封装性中最重要的表现形式之一是将类中的成员变量私有化(使用privete修饰符),然后通过set()和get()方法从外部使用这个变量
set() get()方法:
- 使得可以访问类内部的私有化(private)成员属性;
- 首先:为何要私有化数据?提高安全性,使得外部不能够直接访问,也是封装的一种表现形式;
- 其次,为何又要设置方法来使用数据(使用数据的两种方式:设置:set(),获取:get())?可以在方法中对数据的使用制定规则(逻辑判断语句)!
- 最终提高代码的健壮性,安全性。将不需要对外提供的内容(通常是属性)隐藏,提供公共(public)方法对其访问。
请对比下列两种访问类中成员属性的方法,体会用法:
第一种:成员属性没有private修饰符
class Person
{
int age; //Person类中的age成员属性没有private修饰符
void speak(){
System.out.println("age = " + age);
}
}
class personDemo
{
public static void main(String[] args)
{
Person p = new Person();//实例化Person类,获得对象的引用p
p.age = 20; //可以从外部直接访问Person类的成员属性age
p.speak();
}
}
第二种:成员属性前缀private修饰符
class Person
{
private int age; //Person类中的age成员属性前缀private修饰符
void speak(){
System.out.println("age = " + age);
}
}
class personDemo
{
public static void main(String[] args)
{
Person p = new Person();
//p.age = 20; 错误语句,无法直接通过对象引用访问age成员属性(目的:提高安全性、健壮性)
p.speak();
}
}
解决方法:使用set()和get()方法
class Person
{
private int age; //Person类中的age成员属性前缀private修饰符
public void setAge(int age_1){ //定义公用方法, 注意区分age_1和this.age
this.age= age_1;
}
public int getAge(){
return age;
}
void speak(){
System.out.println("age = " + age);
}
}
class personDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(20);
int age = p.getAge();
p.speak();
}
}
为何要使用set()和get()方法,多此一举?
class Person
{
private int age;
public void setAge(int age_1){
if(age_1>=0 && age_1<130){
this.age= age_1;
speak();
}
else
System.out.println("illegal age!");//提高安全性,外部无法传入-1这种年龄!
}
public int getAge(){
return age;
}
void speak(){
System.out.println("age = " + age);
}
}
class personDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.setAge(20);
int age = p.getAge();
p.speak();
}
}