面向对象---封装
面向对象三大特征:
封装 继承 多态
有了封装,才有继承;有了继承,才有多态
面向对象的首要特征:封装
什么是封装?有什么用?
1、将属性隐藏起来,若需要访问某个属性,提供公共⽅法对其访问。
2、作用有两个:
保证内部结构的安全;
屏蔽复杂,暴露简单。
在代码级别上:
一个类体当中的数据,假设封装之后,对于代码的调用人员来说,不需要关心代码的复杂实现,只需要通过一个简单地入口就可以访问了;
另外,类体中安全级别较高的数据封装起来,外部人员不能随意访问,来保证数据的安全性。
/**
- Person代表人类:
-
每一个人都有年龄这样的属性
-
年龄age,int类型
-
先不使用封装机制,age属性是暴露的,可以在外部程序中随意访问,导致了不安全
-
解决这个问题 : 封装 加private
*/
点击查看代码
public class Person {
//实例变量(属性)
int age;
}
//在外部程序中访问person这个类型中的数据
public class PersonTest {
public static void main(String[] args) {
//创建person对象
Person p1 = new Person();
System.out.println(p1.age); //读数据 (get)表示获取
p1.age = 50; //修改数据 (set)表示修改/设置。 这里可以随意访问,表示不安全。
System.out.println("您的年龄为:" + p1.age);
//访问人的年龄
/**
* 访问一个对象的属性,通常包括两种操作:一种是读数据(get),一种是改数据(set)
* */
}
}
这些操作入口是否应该是方法呢?
写一个方法专门来完成读.(get)
写一个方法专门来完成写.(set)
Q: get()和set()方法应该带有static吗?应该定义为实例方法吗?
A:get读年龄,set改年龄,这个读和该都是操作的一个对象的年龄。所以不带static。是实例方法。(没有对象就没有年龄)
Q:通过‘类名’可以调用set和get方法吗?
A:不行。只有方法修饰符列表中有static的时候,才能使用‘类名.’的方式访问。
[修饰符列表] 返回值类型 方法名(形式参数列表)
注意:
java开发规范中有要求,set()方法和get()方法要满足以下格式。
-
get()方法的要求:
-
public 返回值类型 get + 属性名首字母大写(无参){
-
return xxx;
-
}
-
-
set()方法的要求:
-
public 返回值类型 set + 属性名首字母大写(有1个参数){
-
xxx = 括号里的参数;
-
}
//get()方法。读数据。
点击查看代码
<details>
<summary>点击查看代码</summary>
public void getAge(){
return age;
}
//set()方法
因为是改数据,所以要有参数类型。类型和变量类型一致。
public void setAge(int nianling){
age = nianling;
}
public class Person{
private int age; //属性私有化
public int getAge(){
return age;
}
//set()方法,可以设置关卡
public void setAge(int nianling){
if (nianling >6 || nianling<10) {
System.out.println("你输入的年龄不合法");
}
age = nianling;
}
}
</details>
public class PersonTest02 {
public static void main(String[] args) {
Person p1 = new Person();
//Get方法
System.out.println(p1.getAge());
//Set方法(改)
p1.setAge(20);
System.out.println(p1.getAge());
}
}