当前位置:首页 » 密码管理 » java内部类的访问权限

java内部类的访问权限

发布时间: 2023-05-13 17:23:08

⑴ 什么是内部类内部类有什么作用(java)

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。

成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:

class Circle { double radius = 0; public Circle(double radius) { this.radius = radius; } class Draw { //内部类 public void drawSahpe() { System.out.println("drawshape"); } }}

这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。成员内部类可以无条件访

class Circle { private double radius = 0; public static int count =1; public Circle(double radius) { this.radius = radius; } class Draw { //内部类 public void drawSahpe() { System.out.println(radius); //外部类的private成员 System.out.println(count); //外部类的静态成员 } }}

不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:

外部类.this.成员变量外部类.this.成员方法

虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问:

class Circle { private double radius = 0; public Circle(double radius) { this.radius = radius; getDrawInstance().drawSahpe(); //必须先创建成员内部类的对象,再进行访问 } private Draw getDrawInstance() { return new Draw(); } class Draw { //内部类 public void drawSahpe() { System.out.println(radius); //外部类的private成员 } }}

成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。创建成员内部类对象的一般方式如下:
public class Test { public static void main(String[] args) { //第一种方式: Outter outter = new Outter(); Outter.Inner inner = outter.new Inner(); //必须通过Outter对象来创建 //第二种方式: Outter.Inner inner1 = outter.getInnerInstance(); }} class Outter { private Inner inner = null; public Outter() { } public Inner getInnerInstance() { if(inner == null) inner = new Inner(); return inner; } class Inner { public Inner() { } }}

内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。比如上面的例子,如果成员内部类Inner用private修饰,则只能在外部类的内部访问,如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。这一点和外部类有一点不一样,外部类只能被public和包访问两种权限修饰。我个人是这么理解的,由于成员内部类看起来像是外部类的一个成员,所以可以像类的成员一样拥有多种权限修饰。

⑵ JAVA里面非public类里的public方法访问权限如何

Java中规定每一个文件中必须有一个public类型的class,那么非public类就有两种情况:1.是public类的内部类2.不是public类的内部类

内部类的public方法访问情况:
public class PublicRoleTest {

public static void main(String[] args) {
PublicRoleTest pr = new PublicRoleTest();
A a = pr.new A();
a.functionA();
}

class A{
public void functionA(){
System.out.println("this is to test!");
}
}
}

不是public类的内部类的public方法访基纤问情况:
public class PublicRoleTest {

public static void main(String[] args) {
A a = new A();
a.functionA();
}

}

class A{
public void functionA(){
System.out.println("this is to test!");
}
}

总而言之,非公有类里的搏余仿公有方法,只能被这个非公有类里毁型的其他方法直接访问,外部是不能直接访问的

⑶ JAVA 内部类访问权限

和是不是构造函数没有关系,只要是private修饰的内容,就只有在当前类中可以访问,这是定律。
public :任何地方均可访问。
protected:在同一个包内均可访问,不同包的子类可以访问
默认的:也叫做包访问修饰符,顾名思义,同一个包内才可以访问
private:只有类本身可以访问。

⑷ java 内部类和外部类的区别

1. Java项目一般从src目录开始有com...A.java这样的目录结构。这就是包结构。所以一般编译后的结构是跟包结构一模一样的,这样的结构保证了import时能找到正确的class引用包访问权限就是指同包下的类可见。
import 一般加上全路径,并且使用.*时只包含当前目录的所有类文件,不包括子目录。
2. 外部明迟类只有public和default两种修饰,要么全局可访问,要么包内可访问。
3. 内部类可以有全部访问权限,因乱数为它的概念就是一个成员变量,所以访问权限设置与一般的成员变量相同哗槐首。
非静态内部类是外部类的一个成员变量,只跟外部类的实例有关。
静态内部类是独立于外部类存在的一个类,与外部类实例无关,可以通过外部类.内部类直接获取Class类型。
想要了解更多可以跟我一起讨论哦

⑸ java里面的内部类和外部类是什么_

外部类:
最普通的,我们平时见到的那种类,就是在一个后缀为.java的文件中,直接定义的类
内部类:
内部类,顾名思义,就是包含在外部类中的类,就叫做内部类。内部类有两种,一种是静态内部类,一种是非静态内部类。
静态内部类和非静态内部类之间的区别主要如下:
1、内部原理的区别:
静态内部类是属于外部类的类成员,是一种静态的成员,是属于类的,就有点类似于private static Singleton instance = null;非静态内部类,是属于外部类的实例对象的一个实例成员,静态类则是属于所有外部共有的,也就是说,每个非静态内部类,不是属于外部类的,是属于外部类的每一个实例的,创建非静态内部类的实例以后,非静态内部类实例,是必须跟一个外部类的实例进行关联和有寄存关系的。
2、创建方式的区别:
创建静态内部类的实例的时候,只要直接使用“外部类.内部类()”的方式,就可以,比如School.Teacher();创建非静态内部类的实例的时候,必须要先创建一个外部类的实例,然后通过外部类的实例,再来创建内部类的实例,new School().Teacher()
通常来说,我们一般都会为了方便,会选择使用静态内部类。

⑹ Java的内部类有什么特点 作用和注意

1)根据位置的不同,Java中的内部类分为四种:
 静态内部类
 使用static修饰,声明在类体中
 静态内部类中可以访问外部类的静态成员
 成员内部类
 声明在类体中,不使用static,具有类的成员特征,也就是,必须有类的实例才能创建内部类实例
 内部类实例可以访问共享外部类的成员变量(很常用)
 如:链表的节点就可以定义为内部类
 局部内部类 把类声明在方法中,就是局部内部类,作用域
 类似局部变量(很少见)
 匿名内部类
 匿名类,非常常见,可以写在任何地方,就像一般的语句
 语法更象是创建对象:Date d = new Date(){//...};
 匿名类是对原类的一个继承,同时创建了实例,{} 就是继承以后的类体
类体中可使用所有类的语法
 匿名类不能写构造器
 匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现
2) 任何内部类都编译成独立的class文件
3) 最大的作用:封装!
 匿名类可以封装内部概念:情侣间的“薯仔”和菜市场的“薯仔”是不一样的

⑺ Java内部类的问题

什么是内部类

在一个类内部的类,我们称之为内部类。

内部类可以很好地实现隐藏,一般的非内部类是不允许有 private 与 protected 权限的,但内部类可以。内部类拥有外围类的所有元素的访问权限。

内部类分类:

内部类可以分为:实例内部类、静态内部类和成员内部类,每种内部类都有它特定的一些特点。

在类 A 中定义类 B,那么类 B 就是内部类,也称为嵌套类,相对而言,类 A 就是外部类。如果有多层嵌套,例如类 A 中有内部类 B,而类 B 中还有内部类 C,那么通常将最外层的类称为顶层类(或者顶级类)。

⑻ Java中的四种访问控制域是什么

private,public,protected,默认不写(firendly)

1、Class类的访问权限:
public:可以供所有的类访问。
默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。
即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类
(当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。

说明:
1、每个编译单元(类文件)都仅能有一个public class
2、public class的名称(包含大小写)必须和其类文件同名。
3、一个类文件(*.java)中可以不存在public class。
这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且
我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后
有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。
4、class不可以是private和protected。
5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的static的成员(属性和方法)可以办到。

2、类成员变量的访问权限:
public:紧接public的属性任何类都可以访问到。可以直接使用ClassName.propertyName。但是从类的封装性上来考虑将一个类的属性定义成public一般很少使用,
在定义静态常量的时候通畅会这样定义。如:public static final int PAGE_SIZE=10;
private:只有类本身内部的方法可以访问类的private属性,当然内部类也可以访问其外部类的private成员的。(属性和方法)
默认(friendly):包级可见,同一个包内的类可以访问到这个属性,可以直接使用className.propertyName来访问,但是从类的封装性特性来说很少这样使用类的属性的。
protected:关键字所处理的是所谓“继承”的观念。对于同一包的其他类,protected=默认,对于不同包的类,如果存在继承关系,而baseClass存在protected属性,则可以被其自继承,而不同包的其他类
则不能访问类的protected属性。

3、类的成员方法的访问权限:
其从语法角度来讲,这些访问权限控制符作用于类的方法和作用于类的属性上的效果是一样的。
public:所有类可见。
pirvate:只有同一类内部的方法可见,在有就是内部类也可以访问到。
默认(friendly):包内可见。
protected:继承可见。

4、访问权限存在的理由
1、“让使用者无法碰触到他们不该碰触的东西。”这些东西仅供类的内部机制使用。将某些成员声明成private,对于使用者来说可以说是一种服务,
因为这样使用者可以知道哪些是他关注的哪些是不重要的,不需要关注,如此历来对于使用来说降低了对使用对象认识的难度。
2、(最终要的理由)让程序设计者可以更动class内部运作方式,而无须担心波及到客户端程序。

5、java的“访问权限修饰符”赋予classes开发者极具有价值的控制能力。身为classes开发者,如果你的任何改变可以完全不干扰你的使用者,
你便可以安心改变你的底层实现,因为客户端程序员无法访问class的这一部分。
通过今天学习访问权限的问题了解到,接口或者抽象等等策略所谓的“实现隐藏”其根本原因并不是说为了隐藏实现的代码和思路,而是降低使用者的使用难度,以及从维护角度来说可见范围的控制给程序维护带来了极大的安全性。

热点内容
体检中心的无线网密码多少 发布:2025-02-09 05:40:15 浏览:515
脚本语言是编译还是解释 发布:2025-02-09 05:30:24 浏览:642
天墓密码结局是什么 发布:2025-02-09 05:25:52 浏览:437
如何找回因特网帐号的密码 发布:2025-02-09 05:20:05 浏览:373
树莓派源码 发布:2025-02-09 05:07:00 浏览:651
安卓手机为什么搜不到懂球帝 发布:2025-02-09 05:04:42 浏览:817
生命密码解读走什么 发布:2025-02-09 04:55:51 浏览:279
python常用正则表达式 发布:2025-02-09 04:42:53 浏览:179
机器人编程培训哪家好 发布:2025-02-09 04:37:44 浏览:308
上海怎么学习java 发布:2025-02-09 04:26:39 浏览:23