封装性
封装性的思想
把代码的细节私有化,对外提供代码的功能
-
具有安全性
-
信息隐藏
什么是封装性?
封装性就是把普通的对象进行私有化,并对外提供get和set方法进行使用私有化对象。
权限修饰
-
什么是权限修饰?
权限修饰是对代码的一种访问权限。
-
权限修饰的等级
private < (不给任何权限) < protected < public
private:私有化,只有本类才能访问,其他类需要间接访问。
(不给任何权限):只有在同一个包或者在同一个类里,才能访问,其他需要导包
protected:只有在不同包的子类或者在同一个包或者在同一个类里,才能访问,其他需要导包
public:对外公开,随时访问。(文件必须只包含一个public访问基本的class(可以包含多个非public级别的class))
权限修饰只针对于,方法、变量、成员方法、成员变量。
-
权限修饰代码演示
class test{
?
//成员变量修饰
public int num = 1;
protected int num2 = 2;
int num3 = 3;
private int num4 = 4;
?
//成员方法修饰
public void test(){}
protected void test2(){}
void test3(){}
private void test4(){}
}
成员变量和局部变量的区别
-
定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中
-
作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用
-
默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样
构造方法
-
什么是构造方法
构造方法是用来初始化对象,构造方法其实就是对象new之后的右边对象( Person() ),类名称就是构造方法
创建以后可以立即给对象赋值。
-
方式一(无参构造方法)
public 类名称(){
//...
} -
方式二(全参构造方法)
public 类名称(成员变量类型 成员变量名,...){
//给成员变量赋值
成员变量名 = 成员变量名;
}
注意!
构造方法不要写void, 返回值类型也不要写,构造方法不能写return。
如果你没有编写任何构造方法,编译器就会赠送你一个默认构造方法(普通构造方法),但是如果你编写了一个,那么编译器就不会再赠送默认构造方法
-
代码演示
//不用导包
public class main {
?
public static void main(String[] args) {
//立即给对象赋值
test test = new test("茶仙°",1);
//调用方法
test.show();
//调用成员变量
System.out.println("姓名"+test.name);
System.out.println("年龄"+test.age);
?
}
}
?
class test{
//成员变量
String name;
int age;
?
//成员方法
public void show(){
System.out.println("我叫" + name + ",我" + age + "岁了");
}
?
//构造方法
//无参构造
public test(){}
//全参构造
public test(String text, int num){
name = text;
age = num;
}
}
关键字this
我们先看下面的代码
//不用导包
public class main {
?
public static void main(String[] args) {
//立即给对象赋值
test test = new test("茶仙°",1);
//调用方法
test.show();
}
}
?
class test{
//成员变量
String name;
int age;
?
//成员方法
public void show(){
System.out.println("我叫" + name + ",我" + age + "岁了");
}
?
//构造方法
//无参构造
public test(){}
//全参构造
public test(String name, int age){
name = name;
age = age;
}
}
当局部变量和成员变量名字重名的时候,由于Java采用的是就近原则,构造方法内部赋值是参数 赋值给参数,没有赋值给成员变量。
那么这时候关键字this就有作用了
-
this有什么作用?
this关键字是用来访问成员变量
-
格式
this.成员变量名 = 局部变量名;
当成员变量和局部变量的名字相同时我们想用成员变量的时候,那就要用:this关键字
-
如何使用this关键字
代码演示
//不用导包
public class main {
?
public static void main(String[] args) {
//立即给对象赋值
test test = new test("茶仙°",1);
//调用方法
test.show();
}
}
?
class test{
//成员变量
String name;
int age;
?
//成员方法
public void show(){
System.out.println("我叫" + name + ",我" + age + "岁了");
}
?
//构造方法
//无参构造
public test(){}
//全参构造
public test(String name, int age){
this.name = name;
this.age = age;
}
}
谁调用this谁就是this
-
代码测试
public class main {
?
public static void main(String[] args) {
test test = new test();
System.out.println(test);//code2.test@1b6d3586
test.addressTheThis();//code2.test@1b6d3586
}
}
?
class test{
public void addressTheThis(){
System.out.println(this);
}
}这里this其实可以理解为test. xxx();
什么是Set Get方法?
Set Get方法是当成员变量被私有化以后,Set Get方法对私有化成员变量进行间接的形式,赋值和获取。
-
Set方法:这个成员方法,专门用于向成员变量设置数据
-
格式创建
public void set变量名称(首字母大写)(int num){
变量名称 = num;
}
-
-
Get方法:这个成员方法,专门私语获取age的数据
-
创建格式
public 返回值类型 get变量名称(首字母大写)(){
return 变量名称;
}
-
-
代码演示
public class main {
?
public static void main(String[] args) {
test test = new test();
// 这时候name 和 age不能直接调用,只能通过Set(赋值)Get(获取)方法来调用
test.setName("茶仙");//给name赋值
test.setAge(1);//给age赋值
?
System.out.println("名字:"+test.getName()+",年龄:"+test.getAge()+"岁");//获取name和age
?
}
}
?
class test{
//创建成员变量,并且对其私有化:private
private String name;
private int age;
?
//创建成员方法
public void show(){
System.out.println("我叫" + name + ",我" + age + "岁了");
}
?
//创建构造方法
public test() {}
public test(String name, int age) {
this.name = name;
this.age = age;
}
?
//创建Set Get方法
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;
}
}
标准的封装类
-
私有化(private)所有成员变量
-
创建无参和有参的构造方法
-
创建set和get方法
//标准类
class Person{
//1.私有化(private)所有成员变量
private String name;//姓名
private int age;//年龄
private String sex;//性别
//成员方法...(我这里没有写)
//2.创建无参和有参的构造方法
public Person(){}//无参构造
public Person(String name, int age, String sex){//全参构造
this.name = name;
this.age = age;
this.sex = sex;
}
//3.创建set和get方法
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 setSex(String sex){
this.sex = sex;
}
public String getSex(){
return sex;
}
}