欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java的外部类为什么不能使用private、protected进行修饰

程序员文章站 2022-10-04 08:09:42
1.前提 对于Java外部类和内部类的概念不清楚的,可以自行去百度一下,了解一下。 2.Java的四种权限修饰符 private (私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。 public (公共的)接口访问权限:使用public关键字, ......

1.前提

对于java外部类和内部类的概念不清楚的,可以自行去百度一下,了解一下。

2.java的四种权限修饰符

private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。

public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有类都是可以访问的。

protected(受保护的)继承访问权限:使用protected关键字,就意味着被声明的成员或方法,在子类以及相同包内的其他类都是可以访问的。

default(默认的)包访问权限:即不写任何关键字,就意味着相同包内的其他类(包括子类)可以访问,包外都不可以访问。

修饰符 同类中 同一个包中(子类和无关类) 不同包(子类) 不同包(无关类)
public ✔️ ✔️ ✔️ ✔️
protected ✔️ ✔️ ✔️
default默认 ✔️ ✔️
private ✔️

3.为什么不能使用private、protected修饰外部类

为什么不能用private修饰java外部类?

因为如果使用private修饰java外部类,那么这个类不能创建实例,这个类的属性和方法不能被访问,那么创建这个类毫无意义,所以不能使用private修饰java外部类。

为什么不能用protected修饰java外部类?

举个栗子,如果类a用protected修饰,与类a不同包的类b想要访问类a的话,类b就必须是继承类a的(或者说类b必须为类a的子类),但是类b继承类a的前提又是类b可以访问到类a,仔细想想会发现这里是冲突的,其实这就说明了为什么不能用protected来修饰外部类。再说,protected是用来表示在继承关系中的访问权限的,在同一个包和子类中都可以访问,因为继承就是为了拥有父类的属性和方法,所以protected是用于修饰类的方法和属性的,也就是说,我想要这个类的属性和方法可以被任何子类继承,我就用protected。我想要这个类的属性和方法不能被任何子类继承,我就用private。同理,我想要这个类被继承,我就用abstract。我不想这个类被继承,我就用final。所以,用protected修饰类有什么意义呢?关键点还是在于第一句话,protected是用来表示在继承关系中的访问权限的!