首页 > 试题广场 >

关于 访问权限说法正确 的是 ? ( )

[单选题]

关于 访问权限说法正确 的是 (    )

  • 外部类定义前面可以修饰public,protected和private
  • 局部内部类前面可以修饰public,protected和private
  • 匿名内部类前面可以修饰public,protected和private
  • 以上说法都不正确

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

1.成员内部类

(1)该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员);

(2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员。如果要访问外部类中的成员,需要以下形式访问:【外部类.this.成员变量  或  外部类.this.成员方法】;

(3)在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问;

(4)成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象;

(5)内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。如果成员内部类用private修饰,则只能在外部类的内部访问;如果用public修饰,则任何地方都能访问;如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;如果是默认访问权限,则只能在同一个包下访问。外部类只能被public和包访问两种权限修饰。

2.局部内部类

(1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内;

(2)局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

3.匿名内部类

(1)一般使用匿名内部类的方法来编写事件监听代码;

(2)匿名内部类是不能有访问修饰符和static修饰符的;

(3)匿名内部类是唯一一种没有构造器的类;

(4)匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。

4.内部静态类

(1)静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似;

(2)不能使用外部类的非static成员变量或者方法。

编辑于 2018-09-23 11:15:33 回复(71)
对于外部类来说,只有两种修饰,public和默认(default),因为外部类放在包中,只有两种可能,包可见和包不可见。
对于内部类来说,可以有所有的修饰,因为内部类放在外部类中,与成员变量的地位一致,所以有四种可能。
发表于 2017-05-30 19:35:26 回复(20)
1、外部类前可以修饰:public、default、abstract、final

2、内部类前可以修饰:public、protected、default、private、abstract、final、static

3、局部内部类前可以修饰:abstract、final

其中:访问修饰符(public、protected、default、private),其他都是非访问修饰符
发表于 2018-04-16 15:01:12 回复(1)
局部内部类何来的 publish ,protected ,private 修饰符?? B??
发表于 2020-01-06 11:27:14 回复(0)
1.类 只能用public abstract final修饰。 2.内部类 和成员变量一样可以用所有访问权限修饰符修饰。 3.局部内部类 和局部变量一样不能用访问权限修饰符修饰。
编辑于 2017-08-05 08:37:12 回复(4)
这道题又是不严谨的题,首先B选项说的是内部类,内部类分为成员内部类、局部(方法)内部类、静态内部类、匿名内部类。毫无疑问局部内部类属于内部类,如果B选项正确,那么C选项也应该是正确的。所以应该是选D
发表于 2017-12-05 21:42:37 回复(15)

外部类修饰符

  • public(访问控制符),将一个类声明为公共类,它可以被任何对象访问,一个程序的主类必须是公共类。
  • default(访问控制符),类只对包内可见,包外不可见。
  • abstract(非访问控制符),将一个类声明为抽象类,抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充,抽象类可以包含抽象方法和非抽象方法。。
  • final(非访问控制符),将一个类生命为最终(即非继承类),表示它不能被其他类继承。
    更多解析请参考:http://blog.csdn.net/dawn_after_dark/article/details/74527137
发表于 2017-07-06 10:36:29 回复(0)
局部内部类不可用访问修饰符,答案错误,应选d
发表于 2020-02-01 16:20:37 回复(2)
发表于 2017-05-20 09:26:09 回复(1)
private 只能修饰 内部类 ,一般不推荐使用。
局部内部类就像一个局部变量,修饰符只有final和abstract.
编辑于 2017-05-19 10:11:03 回复(1)
对于外部类来说,只有两种修饰,public和默认(default),因为外部类放在包中,只有两种可能,包可见和包不可见。 对于内部类来说,可以有所有的修饰,因为内部类放在外部类中,与成员变量的地位一致,所以有四种可能。 1.类 只能用public abstract final修饰。 2.内部类 和成员变量一样可以用所有访问权限修饰符修饰。 3.局部内部类 和局部变量一样不能用访问权限修饰符修饰。
编辑于 2017-11-15 08:58:07 回复(0)
只有内部类可以用private修饰
发表于 2017-05-27 11:01:02 回复(0)
A 错误,外部类只能是public或者是默认的。
B 错误,局部内部类就是定义在方法中的类,就好比局部变量一样,不能有修饰符。
C 错误,匿名内部类不能有访问修饰符和static修饰。
所以本人认为应该选择D选项,答案是错误的。
发表于 2020-05-29 11:29:35 回复(0)
A也没说内部类,外部类,  外部类,内部类它通称类,这题有瑕疵
发表于 2018-06-19 09:02:41 回复(0)
局部内部类凭什么可以有权限修饰符 答案错的。
发表于 2020-01-30 08:51:35 回复(0)
外部类定义前面可以修饰public,protected和private
局部内部类前面可以修饰public,protected和private
匿名内部类前面可以修饰public,protected和private
以上说法都不正确
这道题正确答案不是D么???,给的正确答案是B,如果是“成员内部类”就对了。
外部类 default、public
局部内部类、匿名内部类 无修饰符
发表于 2020-01-21 11:15:52 回复(5)
对于外部类来说,只有两种修饰,public和默认(default),因为外部类放在包中,只有两种可能,包可见和包不可见。 对于内部类来说,可以有所有的修饰,因为内部类放在外部类中,与成员变量的地位一致,所以有四种可能。
发表于 2017-06-18 09:08:35 回复(0)
外部类:public和默认(de***t)
内部类:局部内部类和匿名内部类(相当于一个局部变量)可以添加final修饰符,其他访问修饰符不可。
              静态内部类和成员内部类(相当于一个成员变量)可以添加public,protected,de***t,private访问修饰符.

发表于 2022-04-28 11:46:01 回复(0)
自己画的图,不对的地方请指正。




发表于 2023-06-13 16:32:48 回复(1)
1、外部类前可以修饰:public、default、 abstract、final 2、内部类前可以修饰:public、protected、 default、private、abstract、final、static 3、局部内部类前可以修饰:abstract、final 其中:访问修饰符(public、protected、 default、private),其他都是非访问修饰符
发表于 2022-02-27 21:59:25 回复(0)