Java中的四种访问修饰符:public、protected、default(无修饰符,默认)、private。

  • 四种修饰符可修饰的成分(类、方法、成员变量)
  public protected default private

×

×(内部类可以用private修饰)
方法

成员变量

  • 四种修饰符的访问权限

public:对所有类可见

protected:对同一包中的类可见、对同一包及不同包中的子类可见

default:对同一包中的类可见、对同一包中的子类可见

private:仅对类本身可见

可见是可访问的意思,即由这些修饰符修饰的成分(类、方法、成员变量)可以被其它类访问。对子类可见即子类可以继承。

这里需要注意的是protected与default,二者的区别在于不同包中的子类是否可以继承。

访问权限 同一包 同一包中的子类 不同包中的子类 不同包
public

protected

×
default

× ×
private

× × × ×
  • 例如

package1:ParentClass、ChildClassOne、TestOne

package2:ChildClassTwo、TestTwo

package3:TestThree

其中ParentClass为

public class ParentClass {

	public int a=2;
protected int b = 3;
int c = 4;
private int d = 5; }

  1.对于TestOne来说,ParentClass类、a、b、c均可见,d不可见。即在TestOne中可以new一个ParentClass对象,且该对象中的a,b,c变量可操作。如下:

public class TestOne {

	public static void main(String args[]) {

		ParentClass obj = new ParentClass();

		System.out.println(obj.a);
System.out.println(obj.b);
System.out.println(obj.c);
// System.out.println(obj.d); //d 不可见
}
}

  2. ChildClassOne继承ParentClass且与其在同一个包中,则a、b、c均可见,d不可见。

public class ChildClassOne extends ParentClass{

	public static void main(String args[]) {

		ChildClassOne obj = new ChildClassOne();

		System.out.println(obj.a);
System.out.println(obj.b);
System.out.println(obj.c);
// System.out.println(obj.d); // d不可见
}
}

  3ChildClassTwo继承ParentClass,则a、b均可见,d不可见,由于子类与ParentClass不在同一包中,故c(default类型)不可见。

public class ChildClassTwo extends ParentClass{

	public static void main(String args[]) {
ChildClassTwo obj = new ChildClassTwo(); System.out.println(obj.a);
System.out.println(obj.b);
// System.out.println(obj.c); // c不可见
// System.out.println(obj.d); // d不可见
}
}

 4.对于TestTwo来说,ParentClass类、a均可见,b、c、d不可见。由于TestTwo与ParentClass不在同一个包中,故只有public修饰的成分可见。

public class TestTwo {

	public static void main(String args[]) {

		ParentClass obj = new ParentClass();
System.out.println(obj.a);
// System.out.println(obj.b); // b 不可见
// System.out.println(obj.c); // c 不可见
// System.out.println(obj.d); // d 不可见
}
}

 

  • 另外值得注意的是继承父类的子类与其他类之间的可见性,取决于其他类与父类之间的可见性。

对于TestOne来说,ChildClassOne中a,b,c都可见,d不可见,这是由于TestOne与ParentClass在同一个包中。

而对于TestThree来说,ChildClassOne中只有a可见,这是由于TestThree与ParentClass在不同的包中。

需要注意:

虽然a、b对ChildClassTwo可见,TestTwo与ChildClassTwo在同一包中,

但对于TestTwo来说,ChildClassTwo中只有a可见,这是由于TestTwo与ParentClass在不同的包中,只有public修饰的可见。

java中四种访问修饰符的更多相关文章

  1. java中四种访问修饰符区别及详解全过程

    客户端程序员:即在其应用中使用数据类型的类消费者,他的目标是收集各种用来实现快速应用开发的类. 类创建者:即创建新数据类型的程序员,目标是构建类. 访问控制存在的原因:a.让客户端程序员无法触及他们不 ...

  2. java中四种权限修饰符区别

    总的概括:public > protected > (default) > private 细分见下表格: 权限修饰符 public protected (default) priv ...

  3. Java 中的 protected 访问修饰符你真的了解吗?

    protected Java 中的 protected 访问修饰符 总结 在同一个包中,类中 protected 或 default 修饰的属性或方法可以在类外被其对象 (实例) 外部访问,也可以被子 ...

  4. java 基础 四种权限修饰符

    /** * Java有四种权限修饰符: * public > protected > (default) > private * 同一个类 YES YES YES YES * 同一个 ...

  5. Java中四种访问权限总结

    一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...

  6. C#中五种访问修饰符作用范围 public、private、protected、internal、protected internal

    1.五种访问修饰符包括哪些? public.private.protected.internal.protected internal 2.五种访问修饰符的作用范围? public  :公有访问.不受 ...

  7. Java四种访问修饰符

    Java 四种访问权限 一.概述 访问等级比较:public > protected > default > private 无论是方法还是成员变量,这四种访问权限修饰符作用都一样 ...

  8. java四种访问修饰符及各自的权限

    1.public,即共有的,是访问权限限制最宽的修饰符.被public修饰的类.属性.及方法不仅可以跨类访问,而且可以跨包访问. 2. protected,即保护访问权限,是介于public和priv ...

  9. JAVA 中的权限访问修饰符(public,protected,default,private )

    JAVA中有四个权限访问修饰符:public,protected,default,private 注意:这里讲的是对类中属性和方法的访问权限,并不是类的访问权限 1.default:包访问权限 如果什 ...

随机推荐

  1. MFC 关于new出一个新对话框时,退出对话框内存泄漏的问题解决

    问题: 在进行点击按钮弹出对话框时,我是用了new来生成一个新的对话框,但是在新对话框关闭的时候,经过检查发现,新对话框存在内存泄漏问题. 原因: 因为使用了new,但是当时没有找到地方进行delet ...

  2. 设置idea文件类型

  3. MySQL将DESC等关键字作为列名表名的处理方式

    面试被问到一个问题,假如MySQL中的关键字在查询语句中作为列明或者表名出现,应该怎么处理. 例如 select desc from t; 首先创建一张表,包含两个字段,id和desc 插入了三条数据 ...

  4. lava.lang.String数据转换为java.sql.Date

    在JavaWeb编程中,往往涉及数据库,javaBean,前端数据数据类型不一致的问题 数据库和javaBean之间可以直接选择相对应的数据类型,而serverlet从前端获取的数据往往是String ...

  5. ArcGIS中的数据连接问题——数据类型不统一

    博主在研究空间数据分布的时候经常会用到 ArcGIS 进行空间数据可视化.但是有时候会由于数据类型不统一而无法将 csv 中的数据连接到底图上.比如在底图中的数据是字符串格式,而 csv 中是数字格式 ...

  6. Dalvik源码阅读笔记(二)

    DVM 类加载原理: DEX 文件加载到内存中 DvmDex 结构后,还没有完成类的解析工作,我们将 DEX 中的类填充到 ClassObject 结构的过程称为类加载. ClassObject 用来 ...

  7. Unity调用Windows对话框保存时另存为弹框

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  8. NodeServices

    NodeServices https://www.cnblogs.com/stulzq/p/10535310.html 一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来 ...

  9. EasyUI datagrid 格式 二

    单击保存,改表的状态 { field: 'ck', checkbox: true }, $("tr").each(function () { if ($(this).find(&q ...

  10. Maven 整理总结(一)

    使用maven来,今天对maven的使用进行一下总结.总经过程中,参考到的资料,我会尽量列举在下面,如果有涉及侵权的问题,挺联系我,我立即改正. 孤傲苍狼博客 http://www.cnblogs.c ...