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

Python020

java 内部类和外部类的区别?,第1张

1. Java项目一般从src目录开始有com...A.java这样的目录结构。这就是包结构。所以一般编译后的结构是跟包结构一模一样的,这样的结构保证了import时能找到正确的class引用包访问权限就是指同包下的类可见。

import 一般加上全路径,并且使用.*时只包含当前目录的所有类文件,不包括子目录。

2. 外部类只有public和default两种修饰,要么全局可访问,要么包内可访问。

3. 内部类可以有全部访问权限,因为它的概念就是一个成员变量,所以访问权限设置与一般的成员变量相同。

非静态内部类是外部类的一个成员变量,只跟外部类的实例有关。

静态内部类是独立于外部类存在的一个类,与外部类实例无关,可以通过外部类.内部类直接获取Class类型。

想要了解更多可以跟我一起讨论哦

1.    内部类能访问外围类的所有成员,包括私有成员。

当生成一个内部类对象时,此对象与制造它的外围类对象之间就有了一种联系,所以它能访问其外围类对象的所有成员,而不需要任何特殊的条件。如下面代码所示:

[java] view plain copy 

class OutterClass {

private int i = 1

class InnerClass {

public void displayPrivate() {

System.out.println(i)

}

}

}

public class MainClass{

public static void main(String[] args) {

OutterClass outter =  new OutterClass()

OutterClass.InnerClass inner = outter.new InnerClass()

inner.displayPrivate()

}

}

由上面的代码可以看出,内部类能够访问外部类的私有成员变量。在这段代码中,还需要注意的是

①生成内部类对象,必须要先有外围类对象,具体的做法请见代码;

②内部类能访问外围类的私有成员这一点,C++中的嵌套类是没有这个特性的。

2. 内部类与static

①内部类不能含有static方法;

②内部类不能含有static数据成员,除非是static final;

③内部类可以继承含有static成员的类。

3. 匿名内部类

匿名内部类,看起来非常奇怪。因为它太简洁了,但这也带来一个好处,用匿名内部类写出来的代码通常比较简洁啦!