Java面向对象
完整代码
是什么?
封装:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
为什么?
在没有使用封装之前,我们对数据的操作都是进行直接赋值。这样使用可能会产生一些不合理的赋值,不合理的操作。保证数据安全性。
封装的好处
➠只能通过规定的方法访问数据
➠隐藏类的实现细节
➠方便加入控制语句
➠方便修改实现
权限
在实现封装之前需要先了解权限修饰符
权限修饰符的作用如下
public(公共的)
具有最大的访问权限,可以同项目访问任何一个包下的类、接口、异常等。
protected(受保护)
它的主要作用就是保护(继承)子类的。它的含义在于子类可以使用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西。
默认的
即不写权限修饰符。它是针对本包(同包)访问而设计的,任何处于本包下的类、接口、异常等,都可以互相访问。
private(私有的)
它的访问权限仅限于类的内部,主要用于封装。
访问权限可以参考下表
get、set
那么到底如何建立一个封装类呢?
第一步、修改对象属性的访问权限为private(私有的)
private String name;//姓名
private int age;//年龄
private double height; //身高
private String weight;//体重
private String position;//位份
private int appearance;//颜值
private String hobby;//爱好
private String familyBackground;//家庭背景
private String address;//住址
第二步、加入setter/getter方法
set方法用于读取对象属性数据
get方法用于写入对象属性数据
示例:对对象姓名进行封装
public void steName(String name) {
this.name=name;
}
public String getNmae() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
通常年龄设置为不小于0岁和不大于160岁 我们可以在代码中对此进行限制 来保证数据的合理性
public void setAge(int age) {
if(age>=0&&age<=160) {
this.age = age;
}
}
问什么写成这个样子?
走的人多了便也成了路 写的人多了就成了规范
通常我们不会手写setter/getter方法,一般Java编辑器会有快捷方式生成setter/getter方法 可以自行百度
以eclipse为例
Alt+Shift+S
WifeConcubine类的完整代码
package com.qingsu.personnel;
public class WifeConcubine {
//我们将对象的特征称之为对象的属性 将对象的行为称之为对象的方法
//后宫佳丽的共有属性 (对象的属性)
private String name;//姓名
private int age;//年龄
private double height; //身高
private String weight;//体重
private String position;//位份
private int appearance;//颜值
private String hobby;//爱好
private String familyBackground;//家庭背景
private String address;//住址
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;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public int getAppearance() {
return appearance;
}
public void setAppearance(int appearance) {
this.appearance = appearance;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getFamilyBackground() {
return familyBackground;
}
public void setFamilyBackground(String familyBackground) {
this.familyBackground = familyBackground;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//后宫佳丽的共有方法 (对象的方法)
public WifeConcubine() {
System.out.println("对象已被创建");
}
public WifeConcubine(String name) {
this.name=name;
System.out.println(name+"对象已被创建");
}
//赏花
public void flowerViewing() {
System.out.println("这是一个赏花的行为");
}
//和皇上一起吃饭
public void eat() {
System.out.println("这是一个吃饭的行为");
}
//跳舞
public void dancing() {
System.out.println("这是一个跳舞的方法");
}
//侍寝
public void waiter() {
System.out.println("这是一个侍寝的方法");
}
}
修改Simulation类中对属性赋值方法的写入和读取
package com.qingsu.personnel;
public class Simulation {
public static void main(String[] args) {
//创建一个嫔妃对象 王梦竹 同时会调用无参的构造方法 构造方法中this同时会调用有参构造对其进行赋值
WifeConcubine mengzhu= new WifeConcubine();
//创建一个嫔妃对象 李秀影
WifeConcubine xiuying; //创建一个数据类型为 WifeConcubine 我们自己定义的一个类 可以当作数据类型来用
xiuying= new WifeConcubine("李秀影");//将李秀影对象进行实例化 取得对象所需要的属性及方法 可以理解为对对象进行赋值
//对李秀影对象内的属性进行赋值
xiuying.setAge(19); //对年龄进行赋值
xiuying.setHeight(1.66);//对身高进行赋值、
xiuying.setPosition("美人");//对位份进行赋值
xiuying.setAppearance (7); //颜值
xiuying.setHobby("弹琴"); //爱好
xiuying.setFamilyBackground("父亲为户部侍郎"); //家世
xiuying.setAddress("钟粹宫");
System.out.println(xiuying.getName()+"是后宫模拟器的一员,年龄"+xiuying.getAge()+"岁,身高"+xiuying.getHeight()+",在后宫的位份是"+xiuying.getPosition()+",她的爱好是"+xiuying.getHobby()+",她的家世"+xiuying.getFamilyBackground()+",她的住址是"+xiuying.getAddress());
//继续创建一个嫔妃对象 季凌菲
WifeConcubine lingfei = new WifeConcubine("季凌菲");//直接对姓名进行赋初值
lingfei.setAge(21); //对年龄进行赋值
lingfei.setHeight(1.71);//对身高进行赋值
lingfei.setPosition("妃");//对位份进行赋值
lingfei.setAppearance (7); //颜值
lingfei.setHobby("舞蹈");
lingfei.setFamilyBackground("父亲为兵部尚书");
lingfei.setAddress("景仁宫");
System.out.println(lingfei.getName()+"是后宫模拟器的一员,年龄"+lingfei.getAge()+"岁,身高"+lingfei.getHeight()+",在后宫的位份是"+lingfei.getPosition()+",她的爱好是"+lingfei.getHobby()+",她的家世"+lingfei.getFamilyBackground()+",她的住址是"+lingfei.getAddress());
//调用对象的方法 实现对象的行为
xiuying.dancing();
xiuying.eat();
xiuying.waiter();
xiuying.flowerViewing();
}
}