面向对象-封装性(2)
2021/9/1 6:07:43
本文主要是介绍面向对象-封装性(2),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
封装性
封装性的思想
把代码的细节私有化,对外提供代码的功能
-
具有安全性
-
信息隐藏
什么是封装性?
封装性就是把普通的对象进行私有化,并对外提供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; } }
这篇关于面向对象-封装性(2)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南