4-7 面向对象特征之一: 封装与隐藏
概念: 隐藏对象内部的复杂性,只对外公开简单的接口
通俗来说,把该隐藏的隐藏起来,该暴露的暴露出来
一、问题引入:
当我们创建一个类的对象后,我们可以通过“对象.属性”的方式对对象的属性进行赋值,这里赋值操作受到
的属性的数据类型和存储范围的制约 在实际开发中,我们需要 给属性赋值加入额外的限制条件,我们只能通过方法进行限制条件的添加,比如某某方法。同时,我们要避免用户再使用“对象.属性”的方式对属性进行赋值,则需要将属性声明为私有的(private)---->针对属性,就体现出封装性
二、封装性的体现:
我们将类的属性私有化(private),同时,提供公共的方法 来获取(getXXX) 和 设置(setXXX)
拓展: 不对外暴露、私有的方法; 单例模式…
三、权限修饰符(封装性的体现,需要使用权限修饰符)
1、Java 权限修饰符: Private\public\protected\缺省
修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
---|---|---|---|---|
private | YES | |||
(缺省) | YES | YES | ||
protected | YES | YES | YES | |
public | YES | YES | YES | YES |
以上为修饰符修饰后,其作用的范围。 需要记牢!
2、权限修饰符可以修饰: 属性、方法、构造器、内部类
3、具体的:4 种权限都可以修饰类的内部结构;修饰类的话只能使用缺省和 public
总的来说:Java 提供了四种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性
4-8 类的成员其三:构造器(或构造方法、constructor)
一、构造器的作用:
1、创建对象: new+构造器
举个例子 Person p=new Person(); 画下划线的部分就是构造器
2、初始化对象的信息
二、说明
1、如果没有显示的定义类的构造器,则系统默认提供一个空参的构造器(且构造器的权限和类的权限相同)
2、定义构造器的格式: 权限修饰符 类名 (形参列表){}
3、一个类中定义的多个构造器,彼此构成重载
4、一旦我们显式的定义了类的构造器之后,系统就不会再提供默认的空参构造器
5、一个类中,至少会有一个构造器
总结:属性赋值的先后顺序
1、默认初始化
2、显示初始化
3、构造器赋值
4、通过“对象.方法”或“对象.属性”的方式进行赋值
以上操作的先后顺序:1 --> 2–> 3–> 4
拓展: JavaBean:是 Java 语言写成的可重用组件
即满足以下条件的 Java 类:
a.类是公共的 b.有一个无参的公共的构造器 c.有属性,且有对应的 get、set 方法
拓展小知识: UMl 类图
4-9 关键字:this 的使用
this 关键字的使用:
1、this 可以修饰属性、方法、构造器
2、this 修饰属性和方法:
this 理解为当前*对象的*或当前正在创建的对象
2.1 在类的方法中,我们可以使用“this.属性”或者“this.方法”的方式,调用当前对象的属性或方法,通常情况我们都省略了(编译过程中自动会补上)
但是,如果方法的形参和类的属性同名的时候,我们必须显示的使用"this.变量"的方式,表示此变量是属性,而非形参
2.2 在类的构造器中,也是同样
3、this 调用构造器
1、我们在类的构造器中,可以显示的使用"this(形参列表)"方式,调用本类中指定的其他构造器
2、构造器中不能用 this(形参列表)方式调用自己本身
3、如果一个类中有 n 个构造器,则最多有“n-1”构造器中使用了“this(形参列表)” 主要是避免无限循环,两个互相调
4、调用构造器必须放在构造器 首行
5、构造器内部:最多只能声明一个 “this(形参列表)”
public Person(){
this.eat();
}
public Person(String name){
this(); //这一步直接调用了上面的空参构造器
this.name=name;
}
public Person(String name,int age){
this(age); //这一步 调用了上面的构造器
}
public void eat(){
System.out.println("people need to eat");
}
总结:
封装与构造器是面向对象里面 比较重要的内容,需要多多想一想其思想,并且多敲代码去感悟。
每日一句鸡汤:
称为你想吸引的能量!
Fighting