zoukankan      html  css  js  c++  java
  • Java 三大特性(一)封装:private、public、default、protect区别

    一.封装的思想

    1 思想从何而来
    我的观点:
    从现实世界来,人的个体是对各种状态和行为的封装,行为又是对实现步骤的封装。
    例如人有不同的年龄状态,财富状态,有做饭的行为,做饭又包括洗米,下锅等步骤。
    一旦你老妈叫你做饭,那么她不关心你做饭的细节过程,只关心结果。因为你已经将做的饭步骤细节已经完整封装了

    类是对属性和方法的封装,方法是对实现细节的封装。

    其他观点:
    封装是对一些属性和行为进行隐藏,例如财富,它是一个隐私,我不想让外面去看到

    2 封装的好处
    属性的读写控制,数据的安全检查(提高安全性)
    v 隐藏实现细节, 减少修改、扩展类时对外界组件的影响,增强易维护性
    v 提高软件的可复用性
    3 封装的步骤:
    3.1
    用private修饰属性
    3.2
    每个属性添加set,get方法。
    3.3
    在set,get 方法中加控制语句。


    二.访问控制符

    (1)public

    访问控制符干什么用的
    就是对属性和方法进行不同程度的隐藏

    public
    1 可以修饰类
    表示这个类可以被引入到任何地方使用

    2 可以修饰属性和方法
    表示这个属性和方法,可以在本类,本包其它类中,其它包的类中使用

    (2)protected

    protected 受保护的
    1 不能用来修饰类

    2 可以修饰属性和方法
    表示这个属性和方法,不能在其它包中访问,可以在本包中的其它类,可以在其它包的子类通过this/super访问

    (3)default

    不加任何访问控制符就表示default

    default
    可以修饰类,表示该类只能在当前包中使用
    可以修饰方法,属性,表示属性和方法 只能在当前包中的类里使用

    (4)private

    1 何为完全封装
    对所有的属性进行private隐藏,然后为这些属性提供get/set方法来存取访问

    2 get/set方法的写法
    boolean值
    setXxx, isXxx
    其它类型
    setXxx,getXxx

    import java.util.Scanner;
    
    public class Account {
        private String name;
        private int age;
        private double money;
        private Scanner input;
        private Scanner input2;
        
        public Account() {
            super();
        }
    
        public Account(String name, int age, double money) {
            super();
            this.name = name;
            this.age = age;
            this.money = money;
        }
    
        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>1&&age<150) {
                this.age = age;
            }
            else {
                System.out.println("请输入正确的年龄");
                this.age=1;
            }
            
        }
    
        public double getMoney() {
            input = new Scanner(System.in);
            System.out.print("请输入密码:");
            String password=input.next();
            if (password.equals("111")) {
                return money;
            }
            else {
                System.out.println("密码错误,无法查看");
            }
            return 0;
        }
    
        public void setMoney(double money) {
            input2 = new Scanner(System.in);
            System.out.print("请输入密码:");
            String password=input2.next();
            if (password.equals("111")) {
                this.money =this.money+ money;
            }
            else {
                System.out.println("密码错误,无法修改!");
            }
            }
            
            
        
        
    }

     

  • 相关阅读:
    【洛谷4005】小 Y 和地铁(搜索)
    【洛谷4348】[CERC2015] Cow Confinement(扫描线+线段树优化DP)
    【洛谷7016】[CERC2013] Captain Obvious and the Rabbit-Man(手动高斯消元)
    【洛谷3438】[POI2006] ZAB-Frogs(斜率优化)
    【洛谷3426】[POI2005] SZA-Template(KMP)
    【洛谷5157】[USACO18DEC] The Cow Gathering P(拓扑)
    【洛谷5155】[USACO18DEC] Balance Beam P(期望+凸壳)
    【洛谷5204】[USACO19JAN] Train Tracking 2 P(DP)
    【CF757F】Team Rocket Rises Again(最短路图+拓扑)
    【LOJ3038】「JOISC 2019 Day3」穿越时空 Bitaro(线段树)
  • 原文地址:https://www.cnblogs.com/Transkai/p/10350931.html
Copyright © 2011-2022 走看看