Java自学-类和对象 访问修饰符

时间:2022-01-22 19:10:04

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这个类,在不同包,也没有继承关系的类

Java自学-类和对象 访问修饰符

示例 2 : private 私有的

使用private修饰属性

自身:是可以访问的

同包子类:不能继承

不同包子类:不能继承

同包类:不能访问

其他包类:不能访问

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

Java自学-类和对象 访问修饰符

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; 血量上限

Java自学-类和对象 访问修饰符

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; 血量

Java自学-类和对象 访问修饰符

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; 姓名

任何地方,都可以访问

Java自学-类和对象 访问修饰符

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 : 总结

Java自学-类和对象 访问修饰符

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

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

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

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

再就是作用范围最小原则

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