浅谈java面向对象中四种权限
作者:在月牙上放歌 发布时间:2023-03-09 18:43:46
俗话说没有规矩就没有方圆,java作为一门严谨的面向对象的高级编程语言,自然对权限整个重要的问题有严格的控制。
Java中,可以通过一些Java关键字,来设置访问控制权限;
主要有 private(私有), package(包访问权限),protected(子类访问权限),public(公共访问权限)
在java里,这些语句都可以修饰类中的成员变量和方法,但是只有public和友好型可以修饰类。举个例子:
接下来就详细解释一下这几种权限的差别(博客最后有表格)按权限由低到高:(高权限有低权限所有特性)
Private:
类中的所有private方法和private成员变量只能在类中访问而不能在其他类中访问。
例如:
package Main;
public class Private {
private int a;
private int b;
Protected (){
this.a=1;
this.b=2;
//a和b只能在Private类中调用
}
private void set(){
System.out.println(""+a+""+b+"\n");
}
void Print(){
this.set();
//只能在这里用;
}
}
友好型和protected:
如果在另一个类中声明其他的一个类,如果这两个在一个包中那么另一个类能访问这个其他类的友好型变量不同包不能访问:
如果在另一个B类中声明其他的一个类A,如果这两个在一个包中那么另一个类B也能能访问这个其他类A的protected变量(或方法),如果不在一个包,那么如果类A有一个父类C如果,如果父类C中有一个protected变量(或方法),只要B,C在一个包中,B就能使用A中从父类继承的protected方法。如果A是B的子类,如果AB不在一个包中,那么A可以使用B中protected方法。
例如:
package Main;
import Protected.*;
public class Main {
public static void main(String args[]){
Protected jkl=new Protected();
jkl.Print();
//调用jkl父类的protect方法
Frindly prot =new Frindly();
System.out.println(prot.a);
//在Main类中调用友好型的变量
prot.set();
//在Main类中调用友好型的方法
}
}
package Main;
public class Frindly {
int a,b,c,d;
Frindly(){
a=b=c=d=1;
}
void set (){
System.out.print(""+a+" "+b+"\n");
}
}
package Main;
public class Protectedfather{
protected int a;
private int b;
protected Protectedfather (){
this.a=1;
this.b=2;
//a和b只能在Protected中调用
}
private void set(){
System.out.println(""+a+""+b+"\n");
}
protected void Print(){
this.set();
//只能在这里用;
}
}
package Protected;
import Main.*;
public class Protected extends Protectedfather{
public Protected(){
super();
//在另一个包中调用里父类中的protect构造方法
super.a=12;
//调用父类的protect变量
}
}
Public:
如果类中的方法或者变量是public,那么就可以在别的类中调用,没有限制(用在夸包)。A带掉用别的包中的B类
package Main;
import Public.*;
public class Main {
public static void main(String args[]){
int a;
Public p=new Public();
//调用public类中的public方法
a=p.a;
//调用Public类中的public变量
p.set();
}
}
package Public;
public class Public {
public int a=12;
public void set (){
System.out.println("OK\n");
}
}
总结表格::
| 同包 | 不同包 | |||
| 子类 | 非子类 | 子类 | 非子类 | |
Private | 是 | 否 | 否 | 否 | 否 |
友好型 | 是 | 是 | 是 | 否 | 否 |
Protected | 是 | 是 | 是 | 是 | 否 |
Public | 是 | 是 | 是 | 是 | 是 |
来源:http://blog.csdn.net/a1237871112/article/details/50926975
猜你喜欢
- Unity中的PostProcessScene:深入解析与实用案例在Unity游戏开发中,我们经常需要对场景进行后处理,以实现更丰富的视觉效
- 本文实例讲述了Java实现接口的枚举类。分享给大家供大家参考,具体如下:一 点睛枚举类也可以实现一个或多个接口。与普通类实现一个或多个接口完
- 因为公司业务需要,需要把性能日志和业务日志分开打印,用elk收集处理,所以需要对不同的业务的日志,打印到不同文件。使用的是spring bo
- java @Value("${}")获取不到配置文件中值1、property.yml配置spring: ma
- Http通信概述Http通信主要有两种方式POST方式和GET方式。前者通过Http消息实体发送数据给服务器,安全性高,数据传输大小没有限制
- 第一步:引入jar包 <dependency> <gro
- Android 消息机制1.概述Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQu
- 前言:mybatisplus 可以说是对mybatis更好的拓展,一些简单的增删改查的操作已经被作者实现,我们只需引用即可。1.数据库建表这
- 前言这篇博客介绍Java环境的配置,主要是安装JDK,以及path、JAVA_hOME、CLASSPAT的配置,还会介绍配置这些的原因。一.
- 该注解用于将 Controller 的方法返回的对象,通过 HttpMessageConverter 接口转换为指定格式的数据如:json,
- 1|0构造socket在【客户端/服务端】的通信模式中,客户端需要主动构造与服务器连接的 Socket,构造方法有以下几种重载形式:Sock
- 1. strlen —— 求字符串长度1.1 strlen 的声明与用处strlen ,我们有一些英
- 目录1.基于注释声明缓存1.1@EnableCaching1.2@Cacheable1.2.1默认key生成规则1.2.2声明自定义key
- 前言目前有两套RocketMQ集群,集群A包含topic名称为cluster_A_topic,集群B包含topic名称为cluster_B_
- jstack - Prints Java thread stack traces for a Java process, core file
- 本文告诉大家如何使用相同权限调用cmd并且传入命令。如果想要用相同的权限运行一个程序,可以使用 ProcessStartInfo 的方法&n
- 建造者模式概述建造者模式(Builder Pattern)属于创建型模式。它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同
- 下面通过代码给大家介绍c++ string insert() 函数,具体内容如下:basic_string& inser
- 一、什么是并查集对于一种数据结构,肯定是有自己的应用场景和特性,那么并查集是处理什么问题的呢?并查集是一种树型的数据结构,用于处理一些不相交
- 1. 父工程构建1.1 Maven项目搭建环境版本JDK1.8Maven3.6+Maven模板maven-archetype-size删除父