面向对象:封装和隐藏
封装性
高内聚:类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅对外暴露少量的方法用于使用
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界的调用,从而提高系统的扩展性、可维护性。通俗的说就是把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
private
关键字:私有化。
private int age;
封装性的体现:将类的属性私有化(private
),当我们通过对象的实例(instance
)是调用不了被修饰的变量的。但我们可以提供公共(public
)的方法来获取和设置此属性的值。
封装性的体现,需要权限修饰符来配合
- Java规定的4种权限(从小到大排列):
private
、缺省、protected
、public
。 - 4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类。
注意:类只能用public
或缺省来修饰。
public class show {}
/* 或 */
class show {}
总结封装性:Java提供了4种权限修饰符来修改类及类的内部,体现类及类的内部结构在被调用时的可见性的大小。
构造器
构造器 | 构造方法 |
constructor
构造器的作用
创建对象
初始化对象的属性
-
如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
-
定义构造器的格式:
权限修饰符 类名(形参列表){ }
public class PersonTest {
public static void main(String[] args) {
// 创建类的对象: new + 构造器
Person p = new Person();
p.eat();
Person p1 = new Person("Tom");
p1.study();
}
}
class Person {
String name;
int age;
// 构造器
public Person() {
System.out.println("Person().....");
}
public Person(String n) {
name = n;
}
public Person(String n, int a) {
name = n;
age = a;
}
// 方法
public void eat() {
System.out.println("人吃饭");
}
public void study() {
System.out.println("人学习");
}
}
- 一个类中定义的多个构造器,彼此之间构成重载
- 一旦我们定义了类的构造器,系统就不在提供默认的空参构造器
JavaBean的用法
javaBean
是一种Java语言写成的可重用组件。
所谓JavaBean
,是指符合如下标准的Java
类:
- 类是公共的
- 有一个无参的公共的构造器
- 有属性和相对应的
get
、set
方法
public class Customer {
private int id;
private String name;
public Customer() {
}
public void setId(int i) {
id = i;
}
public int getId() {
return id;
}
public void setName(String n) {
name = n;
}
public String getName() {
return name;
}
}
this关键字的使用
this
可以用来修饰:属性、方法、构造器
this
修饰属性和方法:
this
理解为:当前对象 或 当前正在创建的对象- 在类的方法当中,我们可以使用
this.属性
或this.方法
的方式,调用当前对象 或 当前正在创建的对象属性或方法。 - 通常情况:下我们都选择省略
this
。 - 特殊情况下:如果方法形参和类的属性同名时,我们必须使用
this
来指明变量的属性,而非形参。
class Person {
private String name;
private int age;
// 构造器
public Person() {
this.eat();
public Person(String name) {
this.name = name;
public Person(int age) {
this.age = age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
public void eat() {
System.out.println("人吃饭");
this.study();
}
public void study() {
System.out.println("人学习");
}
}
this
调用构造器
-
我们在类的构造器中,可以显式的使用
this(形参列表)
方法,调用本类中的其它构造器 -
构造器不能通过
this(形参列表)
方式调用自己 -
如果一个类中有
n
个构造器,则最多有n - 1
构造器中使用this(形参列表)
-
规定:
this(形参列表)
必须声明在当前的构造器的首行 -
构造器内部,最多只能声明一个
this(形参列表)
,用来调用其它的构造器
class Person {
private String name;
private int age;
// 构造器
public Person() {
this.eat();
}
public Person(String name) {
this();
this.name = name;
}
public Person(int age) {
this();
this.age = age;
}
public Person(String name, int age) {
this(age);
this.name = name;
// this.age = age;
}
}