Java教程

面向对象-封装性(2)

本文主要是介绍面向对象-封装性(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(){}
     }

     

成员变量和局部变量的区别


  1. 定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中

     

  2. 作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用

     

  3. 默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样

 

构造方法

 

  • 什么是构造方法

    构造方法是用来初始化对象,构造方法其实就是对象new之后的右边对象( Person() ),类名称就是构造方法

    创建以后可以立即给对象赋值。

     

  • 方式一(无参构造方法)

     public 类名称(){
         //...
     }

     

  • 方式二(全参构造方法)

     public 类名称(成员变量类型 成员变量名,...){
         //给成员变量赋值
         成员变量名 = 成员变量名;
     }

     

注意!

  1. 构造方法不要写void, 返回值类型也不要写,构造方法不能写return。

  2. 如果你没有编写任何构造方法,编译器就会赠送你一个默认构造方法(普通构造方法),但是如果你编写了一个,那么编译器就不会再赠送默认构造方法

 

  • 代码演示

     //不用导包
     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;
         }
     }

     

标准的封装类

  1. 私有化(private)所有成员变量

  2. 创建无参和有参的构造方法

  3. 创建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)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!