ITPub博客

首页 > 数据库 > 数据库开发技术 > JavaTalk第二期:Java中的访问权限修饰符

JavaTalk第二期:Java中的访问权限修饰符

原创 数据库开发技术 作者:DevXTalk 时间:2020-05-04 07:00:00 0 删除 编辑


Java 中的访问权限修饰符共有四种,分别是:

  • Default :  没有关键字修饰的

  • Private

  • Protected

  • Public


按照对于调用者来说可见性从小到大的次序排序是:

Private < Default < Protected < Public


在Java中访问修饰符可以作用在 class (类) ,field (属性) ,method (方法)上。

注意:作用在类上时,private , protected 只能作用在内部类上,而不能作用在外部类上。这在语法上是不允许的会引起编译错误。




Private

用 private 修饰的部分只能在当前类中访问,它们的可见性范围就是当前类。在当前类之外无法通过硬编码的方式直接使用。这也是 Java 封装性的体现,以及安全性体现,将潜在的变化隐藏在自己内部不要对外界暴漏。


package org.blackhat.chapter2.privatemodifier;
/** * @author blackhat */public class A {
private int num = 100;
private void printNum() { System.out.println("num = " + this.num); }
public static void main(String[] args) { new A().printNum(); }}
class Simple {
public static void main(String[] args) {
A a = new A();// a.printNum(); // Compile Time Error }}



Default

访问修饰符为 default 的部分,允许本类中访问,允许在相同 package 下的非子类中访问 ,允许在相同 package 下的子类中访问。不允许在不同 package 下的类中访问,即使这个类是子类。


package org.blackhat.chapter2.defaultmodifier;/** * @author blackhat */class A {
int num = 100;
void printNum() { System.out.println("num = " + this.num); }
}


package org.blackhat.chapter2.defaultmodifier;
/** * @author blackhat */public class ASimple {
public static void main(String[] args) { A a = new A(); System.out.println(a.num); a.printNum(); }}


package org.blackhat.chapter2.defaultmodifier;
/** * @author blackhat */public class ASub extends A {
void invokeSuperPrintNum() { super.printNum(); }
int getNum() { return super.num; }}


package org.blackhat.chapter2.defaultmodifier;
/** * @author blackhat */public class ASubSimple {
public static void main(String[] args) { ASub aSub = new ASub(); aSub.invokeSuperPrintNum(); System.out.println(aSub.getNum()); }}


package org.blackhat.chapter2.defaultmodifier.otherpackage;

/** * @author blackhat */class ASimple {
public static void main(String[] args) {// new A(); // Compile Time Error }}


package org.blackhat.chapter2.defaultmodifier.otherpackage;

/** * @author blackhat *///public class ASub extends A { // Compile Time Error//}


Protected

protected 修饰的部分,允许在本类中访问,允许在相同的 package 中访问,允许在子类中访问。不允许在不同的 package 的非子类中访问。


package org.blackhat.chapter2.protectedmodifier;
/** * @author blackhat */public class A {
protected int num = 100;
protected void printNum() { System.out.println("num = " + this.num); }
public static void main(String[] args) { new A().printNum(); }}


package org.blackhat.chapter2.protectedmodifier;
/** * @author blackhat */public class Simple {
public static void main(String[] args) { A a = new A(); a.printNum(); System.out.println(a.num); }}


package org.blackhat.chapter2.protectedmodifier;
/** * @author blackhat */public class ASub extends A {
void invokeSuperPrintNum() { super.printNum(); }
int getNum() { return super.num; }}


package org.blackhat.chapter2.protectedmodifier;
/** * @author blackhat */public class ASubSimple {
public static void main(String[] args) { ASub aSub = new ASub(); aSub.invokeSuperPrintNum(); System.out.println(aSub.getNum()); }}


package org.blackhat.chapter2.protectedmodifier.otherpackage;
import org.blackhat.chapter2.protectedmodifier.A;
/** * @author blackhat */public class OtherASub extends A {
void invokeSuperPrintNum() { super.printNum(); }
int getNum() { return super.num; }}


package org.blackhat.chapter2.protectedmodifier.otherpackage;

import org.blackhat.chapter2.protectedmodifier.ASub;
/** * @author blackhat */public class ASubSimple {
public static void main(String[] args) { ASub aSub = new ASub();// aSub.invokeSuperPrintNum(); // Compile Time Error// System.out.println(aSub.getNum()); // Compile Time Error }}



Public

public 也就是完全公开的,被它修饰的部分允许在任何位置访问。


内部类也同样遵守上面的规则


package org.blackhat.chapter2;
/** * @author blackhat */public class OuterSuper {
int defaultNum = 1000;
protected int protectedNum = 2000;}


package org.blackhat.chapter2;
/** * @author blackhat */public class Outer extends OuterSuper {
private int a = 100; int b = 200; protected int c = 300;
private class Inner1 {
void fun() { System.out.println("Outer.a = " + Outer.this.a + " , Outer.b = " + Outer.this.b + " , Outer.c = " + Outer.this.c + ", OuterSuper.defaultNum = " + Outer.super.defaultNum + ", OuterSuper.protectedNum = " + Outer.super.protectedNum); } }
class Inner2 {
void fun() { System.out.println("Outer.a = " + Outer.this.a + " , Outer.b = " + Outer.this.b + " , Outer.c = " + Outer.this.c + ", OuterSuper.defaultNum = " + Outer.super.defaultNum + ", OuterSuper.protectedNum = " + Outer.super.protectedNum); } }
protected class Inner3 {
void fun() { System.out.println("Outer.a = " + Outer.this.a + " , Outer.b = " + Outer.this.b + " , Outer.c = " + Outer.this.c + ", OuterSuper.defaultNum = " + Outer.super.defaultNum + ", OuterSuper.protectedNum = " + Outer.super.protectedNum); } }}


package org.blackhat.chapter2.otherpackage;
import org.blackhat.chapter2.OuterSuper;
/** * @author blackhat */public class OtherOuter extends OuterSuper {
private int a = 100; int b = 200; protected int c = 300;
private class Inner1 {
void fun() { System.out.println("Outer.a = " + OtherOuter.this.a + " , Outer.b = " + OtherOuter.this.b + " , Outer.c = " + OtherOuter.this.c// + ", OuterSuper.defaultNum = " + OtherOuter.super.defaultNum // Compile Time Error + ", OuterSuper.protectedNum = " + OtherOuter.super.protectedNum); } }
class Inner2 {
void fun() { System.out.println("Outer.a = " + OtherOuter.this.a + " , Outer.b = " + OtherOuter.this.b + " , Outer.c = " + OtherOuter.this.c// + ", OuterSuper.defaultNum = " + OtherOuter.super.defaultNum // Compile Time Error + ", OuterSuper.protectedNum = " + OtherOuter.super.protectedNum); } }
protected class Inner3 {
void fun() { System.out.println("Outer.a = " + OtherOuter.this.a + " , Outer.b = " + OtherOuter.this.b + " , Outer.c = " + OtherOuter.this.c// + ", OuterSuper.defaultNum = " + OtherOuter.super.defaultNum // Compile Time Error + ", OuterSuper.protectedNum = " + OtherOuter.super.protectedNum); } }}


本期内容代码整理在 JavaTalk 代码仓库 :

 https://github.com/GitHeP/JavaTalk






长按识别





你点的每个在看,我都认真当成了喜欢


原文作者:DevXTalk;如有侵权,请联系管理员删除。

下一篇: 鸡与猪的故事
请登录后发表评论 登录
全部评论

注册时间:2019-03-23

  • 博文量
    178
  • 访问量
    82586