当前位置: 首页 > ai >正文

Java基础 4.26

1.访问修饰符细节

package com.logic.modifier;public class A {public int n1 = 100;protected int n2 = 200;int n3 = 300;private int n4 = 400;public void m1() {//在同一个类中 可以访问public protected 默认 private 修饰属性和方法System.out.println(n1 + " " + n2 + " " + n3 + " " + n4 + "\t");}protected void m2() {}void m3() {}private void m4() {}public void hi() {//在同一类中 可以访问public protected 默认 private 修饰属性和方法m1();m2();m3();m4();}}
package com.logic.modifier;public class B {public void foo() {A a = new A();//在同一个包下,可以访问public protected 和 默认修饰符属性或方法 不能访问private 属性System.out.println(a.n1 + " " + a.n2 + " " + a.n3);a.m1();a.m2();a.m3();}
}
package com.logic.modifier;public class Test {public static void main(String[] args) {A a = new A();a.m1();B b = new B();b.foo();}
}
package com.logic.pkg;import com.logic.modifier.A;public class Test {public static void main(String[] args) {A a = new A();//在不同包下 可以访问public 修饰符的属性或方法//但是不能访问 protected 默认 private修饰的属性或方法System.out.println(a.n1);a.m1();}
}

 2.封装

封装介绍

  • 封装就是把抽象出的数据(属性)和对数据的操作(方法)封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作(方法),才能对数据进行操作
  • 对电视的操作就是典型的封装(用户不用知道怎么开机的 只用按下开机键)

封装的理解和好处

隐藏实现细节 方法 <-- 调用

可以对数据进行验证 保证安全合理

封装的实现步骤(三步)

  • 将属性进行私有化private(不能直接修改属性)
  • 提供一个公共的(public)set方法 用于对属性判断并赋值
  • public void setXxx(类型 参数名) {//加入数据验证的业务逻辑属性 = 参数名;
    }
  • 提供一个公共的(public)get方法 用于获取属性的值
  • public 数据类型 getXxx() {//权限判断, Xxx某个属性return xxx;
    }

封装快速入门

package com.logic.encap;import jdk.nashorn.internal.ir.CallNode;public class Encapsulation01 {public static void main(String[] args) {//如果要使用快捷键alt + r 需要先配置主类//第一次 我们使用鼠标点击形式运算程序 后面直接可用快捷键Person person = new Person();person.setAge(20);person.setName("John");person.setSalary(10000);System.out.println(person.info());}
}
/*
不能随便查看人的年龄 工资等隐私 并对设置的年龄进行合理的验证 年龄合理就设置 否则给默认
年龄 年龄必须在1-120 工资不能直接查看 name的长度在2-6字符之间*/class Person {public String name;//名字公开private double salary;//薪水保密private int age;//年龄保密//自己写setXxx 和 getXxx 太慢 使用快捷键 alt + insert//根据要求完善代码public int getAge() {return age;}public void setAge(int age) {//加入对数据的校验 相当于增加业务逻辑if (age >= 1 && age <= 120) {this.age = age;} else {System.out.println("你设置的年龄需要在1-120之间");this.age = 18;}}public String getName() {return name;}public void setName(String name) {if (name.length() >= 2 && name.length() <= 6) {this.name = name;} else {System.out.println("名字长度不符合要求,要在2-6个字符之间,将默认无名");this.name = "无名";}}public double getSalary(int password) {if (password == 123456) {return salary;} else {System.out.println("你输入的密码不正确");return -1;}}public void setSalary(double salary) {this.salary = salary;}//写一个方法 返回属性信息public String info() {return "Name: " + name + ", Age: " + age + ", Salary: " + salary;}
}

将构造器与封装结合

public Person(String name, double salary, int age) {
//        this.name = name;
//        this.salary = salary;
//        this.age = age;setSalary(salary);setAge(age);setName(name);
//这样就能调用之前设置的初始化方法,无法绕过验证}

封装练习

package com.logic.encap;import java.util.Scanner;/*
创建程序 在其中定义两个类 Account 和 AccountTest
1.Account类要求具有属性 姓名(长度为2-4位)余额(>20)
密码(必须是6位) 如果不满足 给出提示信息并给默认值
2.通过set方法给Account的属性赋值
3.在AccountTest中测试*/
public class Account {private String name;private double balance;private String password;public Account() {}public Account(String name, double balance, String password) {setName(name);setBalance(balance);setPassword(password);}public String getName() {return name;}public void setName(String name) {if (name.length() >= 2 && name.length() <= 4) {this.name = name;} else {System.out.println("名字必须在2-4个字之间,默认无名");this.name = "无名";}}public double getBalance() {return balance;}public void setBalance(double balance) {if (balance >= 20) {this.balance = balance;} else {System.out.println("余额必须大于20,默认20");this.balance = 20;}}public String getPassword() {return password;}public void setPassword(String password) {if (password.length() == 6) {this.password = password;} else {System.out.println("密码必须是6位,默认000000");this.password = "000000";}}public void info() {//添加一个输入密码的步骤,加入权限检测环节Scanner sc = new Scanner(System.in);System.out.println("请输入密码:");String infoPassword = sc.next();if (password.equals(infoPassword)) {System.out.println("name = " + name + " balance = " + balance + " password = " + password);} else {System.out.println("密码不正确,请重新输入!");}}
}
package com.logic.encap;public class AccountTest {public static void main(String[] args) {Account account = new Account();account.setBalance(50);account.setName("jack");account.setPassword("123456");account.info();}
}
http://www.xdnf.cn/news/2229.html

相关文章:

  • Dijkstra‘s Algorithm Implementation
  • Compose笔记(十九)--NestedScroll
  • Pygame核心概念解析:Surface、Clock与事件循环
  • 教育领域的AIGC革命:构建多模态智能教学系统
  • Dify + Mermaid 实现自然语言转图表
  • Rule.issuer(通过父路径配置loader处理器)
  • Windows怎样改变鼠标指针方案
  • 使用FME生成Delaunay三角形
  • 《淘宝API数据治理实践:采集字段标准化与数据质量监控体系》
  • 戴维斯双击选股公式如何编写?
  • Makefile---自动化构建和管理项目的文件
  • Java基础 — 循环
  • BS架构与CS架构的对比分析:了解两种架构的不同特点与应用
  • C语言函数调用与声明
  • HTML基础
  • QNX/LINUX/Android系统动态配置动态库.so文件日志打印级别的方法
  • 悟空统计平台在教育行业的落地:课程转化路径优化实践
  • Python 实现从 MP4 视频文件中平均提取指定数量的帧
  • vue3学习之防抖和节流
  • module.noParse(跳过指定文件的依赖解析)
  • Spring Boot安装指南
  • Qt 5.15 编译路径吐槽点
  • QML Date:日期处理示例
  • dijkstra
  • 个人电子白板(svg标签电子画板功能包含正方形、文本、橡皮 (颜色、尺寸、不透明度)、 撤销、取消撤销 等等功能,)
  • 计算机网络基本概念
  • 路由器重分发(OSPF+RIP),RIP充当翻译官,OSPF充当翻译官
  • 强化学习在大模型训练中的应用及策略优化算法详解:以LLM为例
  • 【C++ 类和数据抽象】消息处理示例(1):从设计模式到实战应用
  • Swift与iOS内存管理机制深度剖析