java中四种访问修饰符
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不可见
}
}
3. ChildClassTwo继承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中四种访问修饰符的更多相关文章
- java中四种访问修饰符区别及详解全过程
客户端程序员:即在其应用中使用数据类型的类消费者,他的目标是收集各种用来实现快速应用开发的类. 类创建者:即创建新数据类型的程序员,目标是构建类. 访问控制存在的原因:a.让客户端程序员无法触及他们不 ...
- java中四种权限修饰符区别
总的概括:public > protected > (default) > private 细分见下表格: 权限修饰符 public protected (default) priv ...
- Java 中的 protected 访问修饰符你真的了解吗?
protected Java 中的 protected 访问修饰符 总结 在同一个包中,类中 protected 或 default 修饰的属性或方法可以在类外被其对象 (实例) 外部访问,也可以被子 ...
- java 基础 四种权限修饰符
/** * Java有四种权限修饰符: * public > protected > (default) > private * 同一个类 YES YES YES YES * 同一个 ...
- Java中四种访问权限总结
一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...
- C#中五种访问修饰符作用范围 public、private、protected、internal、protected internal
1.五种访问修饰符包括哪些? public.private.protected.internal.protected internal 2.五种访问修饰符的作用范围? public :公有访问.不受 ...
- Java四种访问修饰符
Java 四种访问权限 一.概述 访问等级比较:public > protected > default > private 无论是方法还是成员变量,这四种访问权限修饰符作用都一样 ...
- java四种访问修饰符及各自的权限
1.public,即共有的,是访问权限限制最宽的修饰符.被public修饰的类.属性.及方法不仅可以跨类访问,而且可以跨包访问. 2. protected,即保护访问权限,是介于public和priv ...
- JAVA 中的权限访问修饰符(public,protected,default,private )
JAVA中有四个权限访问修饰符:public,protected,default,private 注意:这里讲的是对类中属性和方法的访问权限,并不是类的访问权限 1.default:包访问权限 如果什 ...
随机推荐
- day55 jQuery 练习
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- 『翻译』Access USB Devices on the Web
https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web Access USB Devices o ...
- VC 任务栏图标闪烁
像QQ来消息时的,图标闪烁效果 将如下代码添加到Timer响应函数中 ) {// 任务栏图标闪烁 if (this != GetForegroundWindow()) { //// this-> ...
- python 爬虫数据处理字符串时间转换格式方法
startDate = "2018-10-01"endDate = "2018-10-31" ###字符转化为日期startTime = datetime.da ...
- 配置JAVA 环境变量
首先 下载好JDK后 打开环境变量配置 配置JAVA_HOME: C:\Program Files\Java\jdk1.8.0_144(也就是jdk下载后的文件夹) 之后配置PATH:这时用到%J ...
- POJ 3461 Oulipo(KMP裸题)
Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...
- iOS原生和React-Native之间的交互1
今天,记录一下iOS原生和React-Native之间的交互.如果第一次接触最好先移步至 http://www.cnblogs.com/shaoting/p/6388502.html 先看一下怎么在i ...
- Netty核心概念
一个Netty程序始于Bootstrap类,Bootstrap类是Netty提供的一个可以通过简单配置来设置或“引导”程序的一个重要的类.Netty中设计了Handlers来处理特定的"ev ...
- 河南省第四届ACM省赛(T1) 序号互换
问题 A: 序号互换 时间限制: 1 Sec 内存限制: 128 MB难度1 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子表格中的单元格坐标快速计算出来.单元格的行坐标是由数字编 ...
- 对jQuery ajax的认识
1.ajax() 方法通过 HTTP 请求加载远程数据. 2.该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XML ...