一、封装概念
封装实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法来实现对隐藏信息的操作和访问。
理解:封装就是将类内部的属性私有化,不允许外部直接访问,然后通过对应的get,set方法来实现对隐藏信息的操作!
封装好处:隐藏类的实现细节,限制不合理操作!
2.实现封装的步骤:
- 修改属性的可见性
- 设置get set方法
- 设置属性的存取限制
代码如下:
//人类
public class Person {
public String name; //姓名
public int age; //年龄
public String gender; //性别
//封装属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<0||age>150) {
System.out.println("****输入的年龄为:"+age+",该年龄不合法,将重置....");
return;
}
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
if(gender.equals("男")||gender.equals("女")) { //判断是否输入的男或者女
this.gender=gender;
}else {
System.out.println("*****性别不合法*****");
}
}
//构造方法
public Person() {
this.name="无名氏";
this.age=18;
this.gender="男";
}
//有参构造
public Person(String name,int age, String gender) {
this.name=name;
this.age=age;
this.gender=gender;
}
//自我介绍方法
public void say() {
System.out.println("自我介绍一下:");
System.out.println("姓名:"+this.name);
System.out.println("性别:"+this.gender);
System.out.println("年龄:"+this.age);
}
}
//测试类
public class Test {
public static void main(String[] args) {
Person person=new Person(); //实例化对象
person.setAge(220); //给年龄赋值
person.setGender("中性"); //给性别赋值
person.setName("刘明"); //给姓名赋值
person.say(); //调用方法,输出
}
}
输出结果:
二、包
1.使用包的步骤
- 新建包
- 将定义好的包分别放入不同的类中
- 导入包
2.包的作用:
-
便于管理
-
防止命名冲突(主要是类名)
-
限制访问权限
3.包的定义
- package是声明包的关键字
- 包的声明必须是java源文件中的第一条非注释性语句,而且一个源文件只能有一个声明包的语句
-
包的使用规范:包名前缀小写,不能以圆点开头或者结尾,不能包含除 " . " 外的其他特殊符号!
三、类和类的访问修饰符
1.类的访问修饰符
java中类的访问修饰符
修饰符
同一个包中
非同一包中
public
可以使用
可以使用
默认修饰符
可以使用
不可以使用
2.类成员的访问修饰符
修饰符 | 同一类中 | 同一包中 | 子类中 | 其他地方 |
private | 可以使用 | 不可以使用 | 不可以使用 | 不可以使用 |
默认修饰符 | 可以使用 | 可以使用 | 不可以使用 | 不可以使用 |
protected | 可以使用 | 可以使用 | 可以使用 | 不可以使用 |
public | 可以使用 | 可以使用 | 可以使用 | 可以使用 |
四、static关键字
1.用static关键字修饰属性
用static修饰的属性称为静态变量或者类变量,没有使用static修饰的属性叫做实例变量
2.用static关键字修饰方法
用static修饰的方法叫做静态方法,没有使用static修饰的方法叫做实例方法。
注意:
-
静态方法/属性,不属于具体的对象,被调用时可以直接 类名.属性/方法名 调用。
-
在静态方法/变量中不能直接访问非静态(实例)方法/变量
-
在实例方法/变量中可以直接调用类中定义的静态方法/变量