相信大家都会发现很多面向对象的编程语言中都有比较多的访问修饰符,拿Java来说,当我们在类作为模型创建对象之后可以访问对象拥有的属性或者方法。这些方法的使用却是大有区别。这里对常见的几种修饰符、重载重写的方法、静态成员的使用方法简单进行一下说明。
一、Java中的几种访问修饰符
Java作为一门优秀的面对对象编程语言,强大在于Java非常灵活、涵盖面广、可移植性高等等优点,这里对Java中的几种访问修饰符做一下说明。
public:
作为一种公有性质的访问修饰符,它的使用面非常广,在创建项目的时候我们可以发现,public访问修饰符在任意的位置都可以访问。
private:
作为一种私有属性的访问修饰符,它的使用面最窄,除了本类中可以进行访问之外都不能进行对于私有变量的修改或者是私有成员方法的使用。但是相对应的,该种访问修饰符的适用面越窄,它的安全性越高。
protected:
作为一种受保护的访问修饰符,它的使用面在public和private之间。使用的方法顾名思义,它在项目中的使用的时候除了在一个project下的同一个package以外的类和父类下的子类中都不能进行跨包访问。
默认:
很多情况下,程序员会提前想好需求再动手,不排除很多老手们想到哪里就写到哪里。默认形态下的访问修饰符就给了很大的空间。默认类型的访问修饰符只在当前的package下可以进行访问。
总结:
访问修饰符 | public | private | protected | 默认 |
---|---|---|---|---|
访问范围 | 任意位置 | 本类 | 在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许 | 允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用 |
上面的总结想必已经言简意赅的说明了常用访问修饰符的访问方式。
这里我们用代码实验一下对于不同访问修饰符的使用场景。
People.java:
/* final class:该类没有子类 public final class \ final public class
* final 方法:该方法不允许被子类重写,但是可以正常被子类继承使用
* final 方法内局部变量:只要在具体被使用之前进行赋值即可,一旦赋值不允许被修改
* 类中成员属性:赋值过程:1、定义直接初始化 2、构造方法 3、构造代码块
*/
public class People{
/*
* 公有的访问修饰符:public
* 私有的访问修饰符:private
* 受保护的访问修饰符:protected
* 默认
*
* private:本类
* 默认:本类、同包
* protected:本类、同包、子类
* public:本类、同包、子类、其他
* 访问范围自上而下依次扩大,限制能力自下而上依次增强
*/
/*
* private:只允许在本类中进行访问
* public:允许在任意位置访问
* protected:允许在当前类、同包子类/非子类、跨包子类调用;跨包非子类不允许
* 默认:允许在当前类、同包子类/非子类调用;跨包子类/非子类不允许调用
*/
private String name = "妮妮";// 昵称
protected int month;// 年龄
String species = "中国人";// 人种
public final static int temp = 12;// 可在子类定义和父类重名的属性
static {
System.out.println("我是父类的静态代码块");
}
public