6.5 封装
package CH05_JAVAObjectOriented;
//封装
public class XZ03_Encapsulation {
private String name;
private int age;
private char sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
// 为了避免赋值错误,需对属性设置限制,在set()方法中进行验证
if (age >= 100) {
System.out.println(age + ":为非法数据");
this.age = 18;
} else {
// this代表当前对象
this.age = age;
}
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
package CH05_JAVAObjectOriented;
public class XZ03_Main {
public static void main(String[] args) {
XZ03_Encapsulation encapsulation = new XZ03_Encapsulation();
encapsulation.setName("玄子");
encapsulation.setAge(12);
encapsulation.setSex('男');
System.out.println(encapsulation.getName());
System.out.println(encapsulation.getAge());
System.out.println(encapsulation.getSex());
System.out.println("------------------");
XZ03_Encapsulation encapsulation2 = new XZ03_Encapsulation();
encapsulation2.setAge(112);
System.out.println(encapsulation2.getAge());
}
}
6.5.1 面向对象三大特征之一 :封装
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
我们程序设计要追求“高内聚,低耦合”
-
高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉
-
低耦合:仅暴露少量的方法给外部使用
将属性私有通过
get/set
方法操作属性
6.5.2 封装的好处
- 隐藏类的实现细节
- 只能通过规定方法访问数据
- 方便加入控制语句
- 方便修改实现
6.5.3 快捷生成
快捷键: Alt + Instant
笔记本用户根据自己机型考虑加上 Shift
即同时按下 Alt + Shift + Instant
选择
Getter 和 Setter
6.6 继承
package CH05_JAVAObjectOriented;
//继承父类
public class XZ04_Extend /* extends Object*/ {
public String name = "玄子";
// 所有的 Java 类都直接或间接地继承了Object类
private int money;
public void say() {
System.out.println("我是父级:XZ04_Extend");
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
package CH05_JAVAObjectOriented;
//继承子类
public class XZ04_Student extends XZ04_Extend {
// extends 父级:XZ04_Extend 的所有方法
// Ctrl + H 查看继承结构
public String name = "XuanZi";
public void test(String name) {
System.out.println(name);
// XuanZiShare
System.out.println(this.name);
// XuanZi
System.out.println(super.name);
// 玄子
}
}
package CH05_JAVAObjectOriented;
public class XZ04_Main {
public static void main(String[] args) {
XZ04_Student student =new XZ04_Student();
student.say();
student.setMoney(1000);
System.out.println(student.getMoney());
System.out.println("------------------");
student.test("XuanZiShare");
}
}
6.6.1 面向对象三大特征之一 :继承
-
一个类获取现有类的所有属性和行为的机制
-
创建基于现有类的新类,可以重用现有类的属性和方法
-
可以在新创建的子类中添加新属性和方法
6.6.2 继承的作用
-
有效的解决了代码的重用问题,使代码拓展更加灵活
-
从始至终完整的体现了一个应用系统,逻辑更加清晰
-
增加软件的可扩展性,以适应不同的业务需求
6.6.3 何时使用继承
JAVA中类只有单继承,没有多继承!
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等
-
继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示
-
子类和父类之间,从意义上讲应该具有
is a
的关系
public class XZ04_Student extends XZ04_Extend {
// extends 后跟继承父级
// 继承 XZ04_Extend 类的所有方法
}
6.6.4 Object 类
所有的 Java 类都直接或间接地继承了Object类,位于java.lang包中。在定义一个类时,如果没有使用extends关键字,即没有显式地继承某个类,那么这个类直接继承Object类
public class XZ04_Extend /* extends Object*/ {
// 默认继承Object类
}
Ctrl + H 查看继承结构树
6.6.5 super 关键字
子类访问父类成员super
代表父类对象
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和 this 不能同时调用构造方法
6.6.6 访问父类的成员
-
super只能出现在子类的方法和构造方法中
-
super调用构造方法时,只能是第一句
-
super不能访问父类的 private 成员
6.6.7 super 和 this 的区别
代表的对象不同
- this:本身调用者这个对象
- super:代表父类对象的应用
前提
- this:没哟继承也可以使用
- super:只能在继承条件才可以使用
构造方法
-
this(); 本类的构造
-
super(); 父类的构造
6.6.8 方法重写
方法的重写或方法的覆盖Override
在子类中,根据需求对从父类继承的方法体进行重新编写,以实现子类需求
必须遵守的规则
-
重写方法和被重写方法必须具有相同的方法名
-
重写方法和被重写方法必须具有相同的参数列表
-
重写方法返回值类型必须和被重写方法的返回值类型相同或为其子类
-
重写方法不能缩小被重写方法的访问权限