java成员变量和方法的public等访问限定符的访问权限

合集下载

java类的访问修饰符总结

java类的访问修饰符总结

java类的访问修饰符总结java的修饰符有:权限修饰符:public、protected、default、private修饰符:abstract、static、finalpublic 使用对象:最广,类、接口、变量、方法protected使用对象:变量、方法注意:不能修饰类(外部类)default 使用对象:类、接口、变量、方法。

(即缺省,什么也不写)private 使用对象:变量、方法注意:不能修饰类(外部类)abstract使用对象:类、接口、方法static 使用对象:类、变量、方法、初始化函数(注意:修饰类时只能修饰内部类)final 使用对象:类、变量、方法transient:告诉编译器,在类对象序列化的时候,此变量不需要持久保存volatile:指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理native:用该修饰符定义的方法在类中没有实现,而大多数情况下该方法的实现是用C、C++编写的。

synchronized:修饰方法,多线程的支持类分外部类和内部类,他们的访问控制是相同的吗外部类是相对于内部类而言的,内部类是定义在类里面的类。

外部类的修饰符有:default(缺省,不写):类定义时前面未加任何修饰符,表示同一个包中可见。

public:修饰类时表示该类能被项目中所有类可见abstract:表示是抽象类final:表示类不可以被继承scrictpf:(java关键字) 当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。

严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示内部类又分:成员内部类、局部内部类、静态内部类、匿名内部类成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列局部内部类:定义在外部类的方法体里面的类静态内部类:使用static修饰的内部类匿名内部类:就是没有名字的内部类成员内部类修饰符有:public:protected:private:private不能修饰外部类,abstract:final:static:可以当做普通类使用,而不用先实例化一个外部类。

public在java中的作用

public在java中的作用

public在java中的作用public是Java中的一个访问修饰符,它可以应用在类、方法和变量上。

下面将介绍public在Java中的作用以及相关参考内容。

1. 类的作用:在Java中,可以使用public修饰类,这样可以使得该类可以在任意的包中被访问和使用。

一个类只能有一个public修饰符,并且这个类的名称要与文件名相同。

参考内容:- 《Java核心技术卷一》(原书第10版)- 有关修饰符的讲解- 《深入理解Java虚拟机:JVM高级特性与最佳实践》(第3版) - 对访问修饰符的意义和使用的详细解释2. 方法的作用:使用public修饰的方法可以被任何类和对象访问,无论是否处于同一个包中。

public方法是类对外提供的对外接口,供其他类调用。

参考内容:- 《Java编程思想(第四版)》- 对访问修饰符的介绍和使用案例- 《Effective Java》(第3版) - 对访问修饰符的最佳实践和使用场景进行解释3. 变量的作用:使用public修饰的变量可以被任何类和对象访问,无论是否处于同一个包中。

public变量是对外公开的数据,可以供其他类读取和修改。

参考内容:- 《Java编程思想(第四版)》- 对访问修饰符的介绍和使用案例- 《Effective Java》(第3版) - 对访问修饰符的最佳实践和使用场景进行解释总结:通过以上介绍可以看出,public修饰符在Java中的作用主要是对外公开和访问控制。

- 对于类,使用public修饰符可以使得该类可以在任意的包中被访问和使用。

- 对于方法,public修饰符可以使得方法对外开放,方便其他类进行调用。

- 对于变量,public修饰符可以将变量对外公开,以供其他类进行读取和修改。

使用public时需要注意:- 对于类和方法,仅在需要对外公开使用的时候使用public修饰符,减少不必要的访问权限。

- 对于变量,建议使用private修饰符,并提供公开的访问方法(如get和set方法)来提供对外的访问接口。

java中修饰符的限制范围

java中修饰符的限制范围

java中修饰符的限制范围Java 是一种面向对象的编程语言,其中修饰符是用于限制代码可见性、修饰类、方法、变量等的重要机制。

掌握不同修饰符的限制范围和应用场景对于Java 开发者至关重要。

一、概述Java 修饰符Java 修饰符分为以下几种:1.访问修饰符:用于控制类、方法、变量的可见性,包括public、private、protected 和默认(friendly)四种。

2.非访问修饰符:包括final、volatile、transient、static、synchronized、native、const 和volatile 等。

二、限制范围的作用访问修饰符的限制范围如下:1.public:表示公共的,可以被任何类访问,包括其他包中的类。

2.private:表示私有,只能在本类中访问。

3.protected:表示受保护,可以被以下三种情况访问:a.同一个包中的类。

b.子类(继承关系)。

c.同一个包中的静态方法。

4.default(友好访问符):表示默认访问权限,相当于protected。

可以被同一个包中的类访问,但不能被其他包中的类访问。

三、不同修饰符的应用场景1.访问修饰符:- public:适用于需要与其他类共享的类、方法或变量。

- private:适用于类的内部实现,建议将私有方法设置为final,以防止子类覆盖。

- protected:适用于需要子类继承或扩展的类、方法或变量。

- default:适用于包内访问,但不希望被其他包访问的类、方法或变量。

2.非访问修饰符:- final:表示不可变,适用于常量、方法(防止被子类覆盖)和类(表示类不可继承)。

- volatile:表示变量在多个线程之间的可见性,适用于共享变量。

- transient:表示变量在垃圾回收时的处理,适用于生命周期较短的变量。

- static:表示静态,适用于静态方法、静态变量,以及类的初始化。

- synchronized:表示同步,适用于需要线程安全的方法或代码块。

java面向对象中四种权限(private,protected,public,友好型)详解

java面向对象中四种权限(private,protected,public,友好型)详解

java⾯向对象中四种权限(private,protected,public,友好型)详解俗话说没有规矩就没有⽅圆,java作为⼀门严谨的⾯向对象的⾼级编程语⾔,⾃然对权限整个重要的问题有严格的控制。

Java⼀共有四种权限,private (私有),public(公有)。

Protected(受保护)还有友好型。

在java⾥,这些语句都可以修饰类中的成员变量和⽅法,但是只有public和友好型可以修饰类。

1. 不⽤priavate,public,protected修饰的成员变量和⽅法被称为友好变量和友好⽅法2. 当在另外⼀个类B中,⽤该类A创建了⼀个对象后,如果类A和类B在同⼀个包中,那么该对象能访问⾃⼰的友好变量和友好⽅法3. 在class前⾯加public的类称为public类,class前⾯不能加protected和private,不加public的类称为友好类。

4. public类默认的构造⽅法是public,友好类默认的构造⽅法是友好的。

举个例⼦:接下来就详细解释⼀下这⼏种权限的差别(博客最后有表格)按权限由低到⾼:(⾼权限有低权限所有特性)Private:类中的所有private⽅法和private 成员变量只能在类中访问⽽不能在其他类中访问。

例如:[java]1. package Main;2.3. public class Private {4. private int a;5. private int b;6. Protected (){7. this.a=1;8. this.b=2;//a和b只能在Private类中调⽤9. }10. private void set(){11. System.out.println(""+a+""+b+"\n");12. }13. void Print(){14. this.set();//只能在这⾥⽤;15. }16. }友好型和protected:如果在另⼀个类中声明其他的⼀个类,如果这两个在⼀个包中那么另⼀个类能访问这个其他类的友好型变量不同包不能访问:如果在另⼀个B类中声明其他的⼀个类A,如果这两个在⼀个包中那么另⼀个类B也能能访问这个其他类A的protected变量(或⽅法),如果不在⼀个包,那么如果类A有⼀个⽗类C如果,如果⽗类C中有⼀个protected变量(或⽅法),只要B,C 在⼀个包中,B就能使⽤A中从⽗类继承的protected⽅法。

Java访问权限控制

Java访问权限控制

Java访问权限控制Java访问权限控制修饰符⽤来定义类、⽅法或者变量,通常放在语句的最前端。

Java语⾔提供了很多修饰符,主要分为以下两类:访问修饰符⾮访问修饰符其中⾮访问修饰符主要有:static、final、abstract、synchronized和volatile,⾮访问修饰符根据各⾃的特性来保证特定功能的实现。

Java中使⽤访问控制符来保护对类、变量、⽅法和构造⽅法的访问,访问控制修饰符对应的权限控制的⼤⼩情况为:public > protected > default(包访问权限) > private。

1. 编译单元和包编译单元:即为最⼩的可以被编译且执⾏的Java⽂件。

⼀个.java⽂件就是⼀个编译单元,⼀个编译单元必须只包含有⼀个public类,可以包含有其他⾮public的类,并且⽤publi类标⽰的类名必须和⽂件名相同。

如果.java⽂件中不包含有publi类,则这个类也是没有意义的,因为不能被外界所访问。

.java⽂件中包含有⼏个类,编译后就会⽣成⼏个.class⽂件。

包含有⼀组类,是以⼀个名字空间集合在⼀起的类⽽已。

2. 访问控制修饰符public : 对所有类可见使⽤对象:类、接⼝、变量、⽅法protected : 对同⼀包内的类和所有⼦类可见使⽤对象:变量、⽅法。

注意:不能修饰类(外部类)default (即缺省,什么也不写): 在同⼀包内可见,不使⽤任何修饰符使⽤对象:类、接⼝、变量、⽅法。

private : 在本类中可见使⽤对象:变量、⽅法。

注意:不能修饰类(外部类)private和protected修饰符不能⽤以修饰类/接⼝2.1 公有访问修饰符-public被声明为 public 的类、⽅法、构造⽅法和接⼝能够被任何其他类访问。

如果⼏个相互访问的 public 类分布在不同的包中,则需要导⼊相应 public 类所在的包。

由于类的继承性,类所有的公有⽅法和变量都能被其⼦类继承。

java四种访问权限实例分析

java四种访问权限实例分析

java四种访问权限实例分析引⾔Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使⽤。

下⾯整理⼀下,在什么情况下,有哪些访问权限可以允许选择。

⼀、访问权限简介访问权限控制:指的是本类及本类内部的成员(成员变量、成员⽅法、内部类)对其他类的可见性,即这些内容是否允许其他类访问。

Java 中⼀共有四种访问权限控制,其权限控制的⼤⼩情况是这样的:public > protected > default(包访问权限) > private ,具体的权限控制看下⾯表格,列所指定的类是否有权限允许访问⾏的权限控制下的内容:访问权限本类本包的类⼦类⾮⼦类的外包类public是是是是protected是是是否default是是否否private是否否否1、public:所修饰的类、变量、⽅法,在内外包均具有访问权限;2、protected:这种权限是为继承⽽设计的,protected所修饰的成员,对所有⼦类是可访问的,但只对同包的类是可访问的,对外包的⾮⼦类是不可以访问;3、包访问权限(default):只对同包的类具有访问的权限,外包的所有类都不能访问;4、private:私有的权限,只对本类的⽅法可以使⽤;注意:要区分开 protected 权限、包访问权限,正确使⽤它们;当某个成员能被所有的⼦类继承,但不能被外包的⾮⼦类访问,就是⽤protected;当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就⽤包访问权限;使⽤访问权限控制的原因:1)使⽤户不要碰触那些他们不该碰触的部分;2)类库设计者可以更改类的内部⼯作的⽅式,⽽不会担⼼这样会对⽤户产⽣重⼤影响;⼆、访问权限控制的使⽤场景访问权限使⽤的场景可以总结为下⾯的五种场景,分别对访问权限的使⽤有不同的限制:1. 外部类的访问控制外部类(外部接⼝)是相对于内部类(也称为嵌套类)、内部接⼝⽽⾔的。

JAVA篇:修饰符与接口、类、方法、成员变量、局部变量、方法块

JAVA篇:修饰符与接口、类、方法、成员变量、局部变量、方法块

JAVA篇:修饰符与接⼝、类、⽅法、成员变量、局部变量、⽅法块或许这是⼀个⽐较轻松简单的知识点,因为只是简单地做⼀个总览对⽐⽽已。

这周⽐较忙,祝我⾃⼰好运。

有关接⼝(interface)的修饰符,其实⼀般⽤public,也可以不加修饰词(default),或者是使⽤private修饰的声明在类的内部的内部接⼝。

不存在protected修饰的接⼝。

⽽接⼝内部可以有⽤public static final修饰的静态常量,除此之外只存在public修饰的⽅法(接⼝中⽆修饰词的⽅法也默认是public)了。

⽆论是接⼝还是接⼝中的⽅法的abstract修饰词都是隐含的,不必显式地修饰在接⼝或者⽅法前⾯。

类的访问限制修饰词与接⼝⼀样,但是还可以有⾮访问限制修饰词abstract(抽象类)和final(不可继承的类)。

类的成员变量可以被四种访问修饰词修饰,同时也可以被static(静态变量),final(常量),transtient(有关序列化特殊标识变量,具体还需要进⾏了解), volatie(线程共享变量)。

类⽅法除了访问限制修饰符,还可使⽤static(静态⽅法),final(不可改变的⽅法),abstract(抽象的),native(⾮java实现的),synchronized(线程同步),类构造⽅法只可使⽤访问限制修饰符修饰,局部变量只能使⽤final定义常量,⽅法块可以使⽤static定义静态⽅法块和使⽤synchronized 定义线程同步的⽅法块。

java的接⼝、类1、接⼝(interface) 在java中,接⼝是⼀个抽象类型,是抽象⽅法的集合,接⼝通常以interface来声明,接⼝只能包含抽象⽅法和以static\final修饰的变量,⼀个接⼝可以继承(extends)另⼀个接⼝。

接⼝只包含要实现的⽅法,⽽类描述对象的属性和⽅法,两者实现类似但是概念不同。

java提供了类和接⼝之间的实现机制,接⼝不可被实例化,只能被实现(implements),实现接⼝的类必须实现接⼝中全部的抽象⽅法,否则该类必须使⽤abstract声明为抽象类。

C++类成员的访问权限及继承方式(public,protected,private)

C++类成员的访问权限及继承方式(public,protected,private)

C++类成员的访问权限及继承⽅式(public,protected,private)1、访问权限C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表⽰公有的、受保护的、私有的,被称为成员访问限定符。

所谓访问权限,就是你能不能使⽤该类中的成员。

在类的内部(定义类的代码内部),⽆论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。

在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。

类成员的访问权限由⾼到低依次为 public --> protected --> private。

2、继承⽅式public、protected、private 指定继承⽅式不同的继承⽅式会影响基类成员在派⽣类中的访问权限。

1) public继承⽅式基类中所有 public 成员在派⽣类中为 public 属性;基类中所有 protected 成员在派⽣类中为 protected 属性;基类中所有 private 成员在派⽣类中不能使⽤。

2) protected继承⽅式基类中的所有 public 成员在派⽣类中为 protected 属性;基类中的所有 protected 成员在派⽣类中为 protected 属性;基类中的所有 private 成员在派⽣类中不能使⽤。

3) private继承⽅式基类中的所有 public 成员在派⽣类中均为 private 属性;基类中的所有 protected 成员在派⽣类中均为 private 属性;基类中的所有 private 成员在派⽣类中不能使⽤。

C++继承的⼀般语法为:class 派⽣类名:[继承⽅式]基类名{派⽣类新增加的成员};下⾯⽤多级继承的例⼦来说明public、protected、private的关系,如下:1 #include<iostream>2using namespace std;3//基类People4class People{5public:6void setname(char *name);7void setage(int age);8void sethobby(char *hobby);9char *gethobby();10protected:11char *m_name;12int m_age;13private:14char *m_hobby;15 };16void People::setname(char *name){ m_name = name; }17void People::setage(int age){ m_age = age; }18void People::sethobby(char *hobby){ m_hobby = hobby; }19char *People::gethobby(){ return m_hobby; }20//派⽣类Student21class Student: public People{22public:23void setscore(float score);24protected:25float m_score;26 };27void Student::setscore(float score){ m_score = score; }28//派⽣类Pupil29class Pupil: public Student{30public:31void setranking(int ranking);32void display(); //显⽰输出函数33private:34int m_ranking;35 };36void Pupil::setranking(int ranking){ m_ranking = ranking; }37void Pupil::display(){38 cout<<m_name<<"的年龄是"<<m_age<<",考试成绩为"<<m_score<<"分,班级排名第"<<m_ranking<<",TA喜欢"<<gethobby()<<"。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在学习java的过程中,我写类经常会用到public,private 和protected 的,我的基本经验就是一般类的成员变量都是用private,方法用public,类内部用的方法用protected,如果是存在子类的,那我就会把父类中的成员变量变为protected。

(其余的看具体实际情况而定)
不过在一些公司的笔试题中,他们会要求你具体的写出像public这些访问限定符的作用域。

其实,平常我都没去系统的考虑这些访问限定符的作用域,特别是包内包外的情况,OK,笔试不行了。

这是java基本的知识,也是公司看重的,那没办法啦,我的脑袋记不住东西,那我只能把这些东西写下来方便自己温故知新。

貌似默认(无)是friendly
如果你看到这里还不是很了解上面的表,或者是很久就没看书了,忘记了上面的表的内容的意义,那下面的例子就是帮助你温故知新的好东东。

例如,有一个包demo中的类P,它有一个private 成员变量data,一个public 默认构造方法,一个public 访问方法getData(),一个protected修改方法setData(),还有一个默认访问方式的辅助方法print()。

package demo;
public class P{
private int data;
public P(){
setData(0);
}
public int getData(){
return data;
}
protected void setData(int v){
data = v;
}
void print(){
System.out.println("used!")
}
}
本类的不用说了,在本类里面才不管什么访问限定符呢。

如有类Q,扩展了P,所以可以调用P的默认构造方法、访问方法getData()和修改方法 setData()。

但类Q不能直接访问P的成员变量data,辅助方法print()也不行(可以把默认,也就是没加任何访问限定符,理解为"包访问 ",在子类中不能直接访问,但在同包中的类却可以访问)。

import demo.P
public class Q extends P{
public Q(){
super(); <---------------------------Q可以访问父类的默认构造方法
}
public Q(int v){
setData(v); <------------------------Q可以访问父类的protected的方法
}
public String toString(){
int v = getData(); <--------------------Q 可以访问父类的public的方法
return String.valueOf(v);
}
public void invalid1(){
data = 12;
<---------------------------Q不能直接访问父类的private数据域
}
public void invalid2(){
print();<-------------------------------Q不能直接访问父类默认权限的方法
}
}
对于默认访问,只有当2个类在同一个包中的时候,才可以互访对方的默认访问权限的成员。

因此,由于类Q并不是包 demo 的一部分,它不可以访问P的辅助方法print()。

现在考虑包 demo 中的类R。

R的方法可以调用P中 public 的默认构造方法和访问方法 getData(),protected 的修改方法 setData(),以及默认访问权限的辅助方法 print()。

然而,类R不能直接访问P的 private 成员变量data。

package demo;
public class R{
private P p;
public R(){
p = new P();
<--------------------------R 可以访问P的默认构造方法
}
public void set(int v){
p.setData(v);
<---------------------------R可以访问P的protected的方法
public int get(){
return p.getData();
<---------------------R可以访问P的public的方法
}
public void use(){
p.print(); <-------------------------------R可以访问P的默认权限的方法
}
public void invalid1(){
p.data = 12;<------------------------- R不能直接访问P的private的数据域
}
}
下面考虑类S,它既不是demo包的一部分,也没有直接或者间接地扩展自类P。

所以,类S仅仅可以调用P中的 public 访问权限的默认构造方法和访问方法getData()。

import demo.P;
public class S{
private P p;
public S(){
p = new P();
<-------------------------------S可以访问P的public的默认构造方法
}
public int get(){
return p.getData();
<------------------------S可以访问P的public的方法
public void invalid1(int v){
p.setData(v);
<------------------------------S不能访问P的protected的方法
}
public void invalid2(){
p.data = 12;
<-------------------------------S不能直接访问P的private的数据域
}
public void invalid3(){
p.print(); <------------------------------- S不能直接访问P的默认权限的方法
}
}
上面三个类是分别对应作用域子类、包内和外部三种情况的。

相关文档
最新文档