深度理解Java访问修饰符
作者:dz小伟 发布时间:2021-10-26 17:16:08
标签:Java,访问修饰符
一、作用及种类
UML类图
建模语言或标准建模语言
类的属性、操作中的可见性使用+、#、-分别表示public、protected、private
作用:信息隐藏
防止用户意外修改数据,使模块易于维护和使用有哪些修饰符呢?
private:只有该类可以访问
protected:该类及其子类的成员可以访问,同一个包中的类也可以访问
public:该类或非该类可以访问
默认:同一个包中的类可以访问
可以作用于类,成员,方法
二、深度理解
同一个类
就是同一个类里面的,类相当于结构体
同一个包
圈中的就是包
三、代码理解
属性封装
class Student{//class 相当于c语言的struct
int age;
String name;
double score;
private int sex;//不同类,无法访问这个成员
public void cs(int a){
sex = a;
}
void introduce(){
System.out.println("sex="+sex+",age="+ age +",name=" + name + ",score=" + score);
}
void testFunc(){
System.out.println("testFunc");
}
}
public class Test {
public static void main(String[] args) {
Student stu1 = new Student();
//stu1.sex = 1; 因为类里面使用了private,不同类就无法访问
stu1.cs(0);//可以使用方法,间接修改成员
stu1.age = 22;
stu1.name = "xiaowei";
stu1.score = 100;
stu1.introduce();
stu1.testFunc();
}
}
/*
sex=0,age=22,name=xiaowei,score=100.0
testFunc
*/
方法封装
class Student{//class 相当于c语言的struct
private int age;
String name;
double score;
private int sex;
private void myage(int myage){//不可见的方法,可以在别的方法中使用达到更改属性的目的
age = myage;
}
public void setage(int realage){//更改age
age = realage;
}
public int getage(){//输出age,方法里偷偷使用myage,输出永远是18
myage(18);
return age;
}
void cs(int a){
sex = a;
}
void introduce(){
System.out.println("sex="+sex+",age="+ age +",name=" + name + ",score=" + score);
}
void testFunc(){
System.out.println("testFunc");
}
}
public class Test {
public static void main(String[] args) {
Student stu1 = new Student();
//stu1.sex = 1;
stu1.cs(0);
//stu1.age = 22;
stu1.setage(36);//更改年龄36
stu1.name = "xiaowei";
stu1.score = 100;
stu1.introduce();
stu1.testFunc();
System.out.println("age="+stu1.getage());//输出年龄是18,方法中偷偷调用了不可见的方法myage
}
}
/*
sex=0,age=36,name=xiaowei,score=100.0
testFunc
age=18
*/
来源:https://blog.csdn.net/m0_51247005/article/details/117674783


猜你喜欢
- SpringCloud feign无法注入接口接口:package cn.mn.app.service;import org.springf
- 本文通过两个方法:(1)计算总的页数。 (2)查询指定页数据,实现简单的分页效果。思路:首先得在 DAO 对象中提供分页查询的方法,在控制层
- 先执行以一个简单的示例:static void Main(string[] args) { &nb
- break和continue的说明break 循环结构,一旦执行,就结束(或跳出)当前循环结构,此关键字的后面,不能
- Fragment的主要意义就是提供与Activity绑定的生命周期回调。Fragment不一定要向Activity的视图层级中添加View.
- spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>、&
- 这次我们来说一下hibernate的层次设计,层次设计也就是实体之间的继承关系的设计。 也许这样比较抽象,我们直接看例子。&nbs
- 本项目为大家分享了Java实现简单计算器功能的具体代码,供大家参考,具体内容如下一 项目说明实训目的:掌握 Java GUI 开发中的布局管
- 本文实例讲述了C#基于UDP进行异步通信的方法。分享给大家供大家参考。具体如下:服务器端:using System;using System
- 一、前言近些年,随着微服务框架在越来越多的公司产品中实践落地,以Spring Cloud Alibaba为导向的一站式微服务解决方案也成为微
- 带着问题 往下看 (namesrv)我们在写组件的时候 怎么管理version如果现在让你 维护一个 各个jar包公用的属性System.e
- 一、使用注解实现自定义映射关系当POJO属性名与数据库列名不一致时,需要自定义实体类和结果集的映射关系,在MyBatis注解开发中,使用 @
- 使用lamda表达式对list进行求和Lambda 表达式是 JDK8 的一个新特性,最近写项目中求和计算使用的较多,写篇文章记录下。1、实
- 相信有些同学跟我一样,曾经对这个问题很疑惑。在网上也看了一些别人说的观点,评论不一。有说有值传递和引用传递两种,也有说只有值传递的,这里只说
- sql中like通配符模糊匹配问题针对oracle数据库:将查询条件通过功能类处理/** * Desc
- 详解android 通过uri获取bitmap图片并压缩很多人在调用图库选择图片时会在onActivityResult中用Media.get
- 本文实例为大家分享了iOS新浪微博分享功能的具体代码,供大家参考,具体内容如下做新浪分享 需先去http://open.weibo.com/
- 旧的设计方案开发api的时候,需要先定义好接口的数据响应结果.如下是一个很简单直接的Controller实现方法及响应结果定义.@RestC
- #define Testusing System;namespace Wrox.ProCSharp.ParameterTestSample.
- java 中String.equals和==的比较 初学java有段时间了,但是昨晚忽然就被"asd&quo