封装(private)
- 所谓封装就是把属性私有化,如:我在Cat这个类中定义了一个属性name,注意这个name只能在Cat这个类中进行使用。
- 通俗一点就是:该露的露,该藏的藏
- 我们程序设计要求"高内聚,低耦合";
- 高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉;
- 低耦合:仅暴露少量的方法给外部使用。
- 封装(数据的隐藏)
- 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息的隐藏。
- 记住这就话就够了:属性私有,get/set
代码实现:
package com.oop2;
/**
* 封装的作用:
* 1、提高程序的安全性
* 2、隐藏代码的实现细节
* 3、统一接口
* 4、提高系统的维护
*/
// 启动类
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
System.out.println(student.getName());
student.setAge(-1);
System.out.println(student.getAge());
}
}
// 学生类
package com.oop2;
public class Student {
// 属性私有化
private String name;
private int id;
private char sex;
private int age;
// 提供一些可以操作这些属性的方法
// 提供一些 public 的 get/set 方法
// get:获取数据
// set:给数据设置值
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
// 利用set方法设置年龄的规范性
public void setAge(int age) {
if (age<0||age>150){
this.age = 2;
}else {
this.age = age;
}
}
}
输出:
张三
2 // 这个就是操作属性后所输出的值,可以大大的提高代码的安全性,不能随便操作...
解析:private一般会用在类中的属性前面,不能让其他类直接操作该类的属性;必须要通过该类中的get/set方法去操作该类的属性,并且还能在该类的属性中使用set方法可以给属性设置一些安全隐患;就如上述代码,人的年龄不可能小于0岁或者超过150(极其少见),所以咱们就判断一下,如果传入的值小于0或者大于150那就给他传入2,如果不在这个范围之内就可以正常传参。
2、继承(extends)
- 继承的本质就是对某一批类的抽象,从而实对显示世界更好的建模(父子).
- 关键字为 extends :意思是"扩展",子类是父类的扩展。
- Java中只有单继承,没有多继承。
- 继承是类和类之间的一种关系;除此之外,类和类之间的关系还有依赖、组合、聚合等…
- 继承关系的两个类,一个为父类(基类);子类继承父类,使用关键字extends来表示。
- 子类和父类之间,从意义上讲应该具有"is a"的关系。
- Java中所有的类统一都有一个总父类,就是Object.
代码实现:
package com.oop3;
/*
继承:extend
*/
// 父类
public class Person {
// 一旦子类继承父类后,父类的所有属性以及属性子类都可使用
private int money = 1_000_000_000; // 父类属性私有化之后就要使用get/set方法进行调用
// 父类方法
public void sleep(){
System.out.println("键盘敲烂,工资过万!");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
package com.oop3;
// 学生类去继承父类
public class Student extends Person{
}
// 老师类也去继承父类
package com.oop3;
public class Teacher extends Person{
}
package com.oop3;
public class Teacher extends Person{
}
package com.oop3;
/*
* 测试类,用来专门测试继承
*/
public class Application {
public static void main(String[] args) {
Person p = new Person();
p.sleep();
p.setMoney(123);
System.out.println(p.getMoney());
Teacher t = new Teacher();
t.sleep();
t.setMoney(111);
System.out.println(t.getMoney());
}
}
输出:
键盘敲烂,工资过万!
123
键盘敲烂,工资过万!
111
注意:可以看到父类中有一个变量int已经赋值了,但是在输出的时候只要使用set进行设置值时,就会把之前的值个覆盖掉。