面向对象之封装性
构造器
this关键字
package与import

一.封装性

面向对象的特征一: 封装与隐藏

问题: 当创建了类的对象以后, 如果直接通过"对象.属性"的方式对相应的对象属性赋值的话, 可能会出现不满足实际情况的意外, 我们考虑不让对象来直接作用属性, 而是通过"对象.方法"的形式, 来控制对象对属性的访问. 实际情况中, 对属性的要求就可以通过方法来体现.

封装性的思想:

  • ①将类的属性私有化;

  • ②提供公共的方法(setter&getter)来实现调用.

A.四种权限修饰符

1.权限从大到小为:public protected 缺省 private
2.四种权限都可以用来修饰属性、方法、构造器
3.修饰类的话:public 缺省(default)类只能被同一个包中的类访问

修饰符

二.构造器

类的第三个成员: 构造器(constructor 构造方法)

A.构造器的作用

①创建对象 ②给创建的对象的属性赋值

B.构造器的特征

①与类名一致②没有返回值类型③无return与语句

④不能被static|final|abstract|native本地的|synchronized同步的

  • 1.设计类时, 若不显式声明类的构造器的话, 程序会默认提供一个空参的构造器..
  • 2.一旦显式的定义类的构造器, 那么默认的构造器就不再提供.
  • 3.如何声明类的构造器. 格式: 权限修饰符 类名(形参){ }
  • 4.类的多个构造器之间构成重载

类对象的属性赋值的先后顺序: ①属性的默认初始化 ②属性的显式初始化 ③通过构造器给属性初始化

④通过"对象.方法"的方式给属性赋值

三.this

this:

1.使用在类中, 可以用来修饰属性、方法、构造器
2.表示当前对象或者是当前正在创建的对象
3.当形参与成员变量重名时, 如果在方法内部需要使用成员变量, 必须添加this来表明该变量时类成员
4.在任意方法内, 如果使用当前类的成员变量或成员方法可以在其前面添加this, 增强程序的阅读性
5.在构造器中使用“this(形参列表)”显式的调用本类中重载的其它的构造器
  ①要求“this(形参列表)”要声明在构造器的首行!
  ②类中若存在n个构造器, 那么最多有n-1构造器中使用了this.
6.静态方法中不能使用this和super关键字

例子:

One More Thing 👇
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class TestPerson{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println(p1.getName() + ":" + p1.getAge());
Person p2 = new Person("BB",23);
int temp = p2.compare(p1);
System.out.println(temp);
}
}
class Person{
private String name;
private int age;
public Person(){
this.name = "AA";
this.age = 1;
}
public Person(String name){
this();
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
}
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 void eat(){
System.out.println("eating");
}
public void sleep(){
System.out.println("sleeping");
this.eat();
}
//比较当前对象与形参的对象的age谁大。
public int compare(Person p){
if(this.age > p.age)
return 1;
else if(this.age < p.age)
return -1;
else
return 0;
}
}

四.package与import

package: 声明源文件(即当前文件)所在的包(即文件夹), 必须写在程序的第一行.

每“.”一次, 表示一层文件目录; 包名都要小写.

import:

  • 1)显式导入指定包下的类或接口
  • 2)写在包的声明和源文件之间
  • 3)如果需要引入多个类或接口, 那么并列写出
  • 4)如果导入的类是java.lang包下的, 如: System String Math等, 就不需要显式的声明.
  • 5)理解.*的概念.比如java.util.*;
  • 6)如何处理同名类的导入. 如: 在util包和sql包下同时存在Date类.
  • 7)import static 表示导入指定类的static的属性或方法
  • 8)导入java.lang.*只能导入lang包下的所有类或接口, 不能导入lang的子包下的类或接口

评论