Java的四种访问修饰符

成员变量有四种修饰符

private 私有的

package/friendly/default 不写

protected 受保护的

public 公共的

比如public 表示公共的

public String name;

而maxHP 没有修饰符即代表package/friendly/default

float maxHP

示例 1 : 类之间的关系

类和类之间的关系有如下几种:

以Hero为例

自身:指的是Hero自己

同包子类:ADHero这个类是Hero的子类,并且和Hero处于同一个包下

不同包子类:Support这个类是Hero的子类,但是在另一个包下

同包类: GiantDragon 这个类和Hero是同一个包,但是彼此没有继承关系

其他类:Item这个类,在不同包,也没有继承关系的类



示例 2 : private 私有的

使用private修饰属性

自身:是可以访问的

同包子类:不能继承

不同包子类:不能继承

同包类:不能访问

其他包类:不能访问

注: 红色字体,表示不可行

package charactor;

import property.Weapon;

public class Hero {

    //属性id是private的,只有Hero自己可以访问
//子类不能继承
//其他类也不能访问
private int id; String name; float hp; float armor; int moveSpeed; public void equip(Weapon w) { } }

示例 3 : package/friendly/default 不写

没有修饰符即代表package/friendly/default

float maxHP; 血量上限

package charactor;

import property.Weapon;

public class Hero {
private int id; String name; // 无修饰符的属性 hp
// 自己可以访问 // 同包子类可以继承
// 不同包子类不能继承 // 同包类可以访问
// 不同包类不能访问
float hp; float armor; int moveSpeed; public void equip(Weapon w) { } }

示例 4 : protected 受保护的

受保护的修饰符

protected float hp; 血量

package charactor;

import property.Weapon;

public class Hero {
private int id; String name; // protected饰符的属性 hp
// 自己可以访问 // 同包子类可以继承
// 不同包子类可以继承 // 同包类可以访问
// 不同包类不能访问
protected float hp; float armor; int moveSpeed; public void equip(Weapon w) { } }

示例 5 : public 公共的

公共的修饰符

public String name; 姓名

任何地方,都可以访问

package charactor;

import property.Weapon;

public class Hero {
private int id; // public的属性 name
// 自己可以访问 // 同包子类可以继承
// 不同包子类可以继承 // 同包类可以访问
// 不同包类可以访问
public String name; protected float hp; float armor; int moveSpeed; public void equip(Weapon w) { } }

示例 6 : 总结



示例 7 : 那么什么情况该用什么修饰符呢?

那么什么情况该用什么修饰符呢?

从作用域来看,public能够使用所有的情况。 但是大家在工作的时候,又不会真正全部都使用public,那么到底什么情况该用什么修饰符呢?

  1. 属性通常使用private封装起来
  2. 方法一般使用public用于被调用
  3. 会被子类继承的方法,通常使用protected
  4. package用的不多,一般新手会用package,因为还不知道有修饰符这个东西

再就是作用范围最小原则

简单说,能用private就用private,不行就放大一级,用package,再不行就用protected,最后用public。 这样就能把数据尽量的封装起来,没有必要露出来的,就不用露出来了

Java自学-类和对象 访问修饰符的更多相关文章

  1. Java语言中有4种访问修饰符

    转载:http://wuhaidong.iteye.com/blog/851754 Java语言中有4种访问修饰符 在Java语言中有4中访问修饰符:package(默认).private.publi ...

  2. C#学习笔记06--类/对象/访问修饰符/方法

    编程思想   1.面向过程   面向过程是要把问题解决的过程分成有一定顺序的不同步骤, 然后按照步骤一步步的将问题解决.   2.面向对象   面向对象解决问题的思路是先分析问题中所涉及的对象, 然后 ...

  3. c# 第33节 类的封装--访问修饰符

    本节内容: 1:封装的简介 2:封装怎么实现 3:访问修饰符 1:封装的简介 2:封装怎么实现 3:访问修饰符 4:访问修饰符注意点

  4. java自学-类与对象

    1.面向对象和面向过程 java是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想. 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为.面向对象思想就是在计算机程序设计过程中, ...

  5. Java自学-类和对象 类属性

    Java的类属性和对象属性 当一个属性被static修饰的时候,就叫做类属性,又叫做静态属性 当一个属性被声明成类属性,那么所有的对象,都共享一个值 与对象属性对比: 不同对象的 对象属性 的值都可能 ...

  6. Java自学-类和对象 类方法

    Java的类方法和对象方法 类方法: 又叫做静态方法 对象方法: 又叫实例方法,非静态方法 访问一个对象方法,必须建立在有一个对象的前提的基础上 访问类方法,不需要对象的存在,直接就访问 步骤 1 : ...

  7. Java自学-类和对象 单例模式

    Java的饿汉式与懒汉式单例模式 LOL里有一个怪叫大龙GiantDragon,只有一只,所以该类,只能被实例化一次 步骤 1 : 单例模式 单例模式又叫做 Singleton模式,指的是一个类,在一 ...

  8. Java自学-类和对象 引用

    什么是Java中的引用? 引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用. 步骤 1 : 引用和指向 new Hero(); 代表创建了一个Hero对象 但是也仅仅是创建 ...

  9. Java自学-类和对象 属性初始化

    如何进行Java的属性初始化 步骤 1 : 对象属性初始化 对象属性初始化有3种 声明该属性的时候初始化 构造方法中初始化 初始化块 . public class Hero { public Stri ...

随机推荐

  1. SpirngBoot整合Spring-data-JPA

    0.引言 使用SpringBoot data jpa技术相比mybatis是比较难的,这里只给出整合方法 1.引入SpringBoot data jpa <!--JPA依赖--> < ...

  2. 6 、 图论—NP 搜索

    6.1 最大团 //最大团 //返回最大团大小和一个方案,传入图的大小 n 和邻接阵 mat //mat[i][j]为布尔量 #define MAXN 60 void clique(int n, in ...

  3. Excel数据导入到Sql server

    问题:数据库内直接操作导致 错误 0xc020901c: 数据流任务 1: 源 - yndata1$.输出[Excel 源输出] 上的 源 - yndata1$.输出[Excel 源输出].列[ind ...

  4. 以太网PHY寄存器分析【转】

    转自:https://blog.csdn.net/Firefly_cjd/article/details/79825869 以太网PHY寄存器分析    1 1.以太网PHY标准寄存器分析    2 ...

  5. NVIDIA-SMI参数解析

    第一栏的Fan:N/A是风扇转速,从0到100%之间变动,这个速度是计算机期望的风扇转速,实际情况下如果风扇堵转,可能打不到显示的转速.有的设备不会返回转速,因为它不依赖风扇冷却而是通过其他外设保持低 ...

  6. 201871010117-石欣钰《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  7. 代码审计-sha()函数比较绕过

    <?php $flag = "flag"; if (isset($_GET['name']) and isset($_GET['password'])) { var_dump ...

  8. Pycharm中使用from appium import webdriver时报错:ModuleNotFoundError: No module named 'appium'

    此时先检查一下有没有安装Appium-Python-Client,如果没有安装Appium-Python-Client就在控制台输入pip install Appium-Python-Client进行 ...

  9. zz2019年主动学习有哪些进展?答案在这三篇论文里

    2019年主动学习有哪些进展?答案在这三篇论文里 目前推广应用的机器学习方法或模型主要解决分类问题,即给定一组数据(文本.图像.视频等),判断数据类别或将同类数据归类等,训练过程依赖于已标注类别的训练 ...

  10. node.js与mysql数据库的交互

    我们已经建好了数据库也建好了表,现在我们想查询数据库表中的内容,应该怎么做呢? 代码如下: var mysql = require('mysql'); //导入mysql包模块 var connect ...