本文目錄一覽:
java 內部類和外部類的區別?
1. Java項目一般從src目錄開始有com…A.java這樣的目錄結構。這就是包結構。所以一般編譯後的結構是跟包結構一模一樣的,這樣的結構保證了import時能找到正確的class引用包訪問許可權就是指同包下的類可見。
import 一般加上全路徑,並且使用.*時只包含當前目錄的所有類文件,不包括子目錄。
2. 外部類只有public和default兩種修飾,要麼全局可訪問,要麼包內可訪問。
3. 內部類可以有全部訪問許可權,因為它的概念就是一個成員變數,所以訪問許可權設置與一般的成員變數相同。
非靜態內部類是外部類的一個成員變數,只跟外部類的實例有關。
靜態內部類是獨立於外部類存在的一個類,與外部類實例無關,可以通過外部類.內部類直接獲取Class類型。
想要了解更多可以跟我一起討論哦
Java中類與類之間的關係是什麼?
外部類,內部類,匿名類,外部類就是兩個類並列的class
A
{}
class
B
{},內部類:class
A
{
class
B
{}},B可以直接使用包涵它的類的成員變數,內部類不能被除包涵類以外的類調用;還有就是匿名類,也是內部類
classA{new
{}}省略定義類名直接定義方法和使用,這個適用於代碼比較簡單且這個啊類不需要被其他類調用
java 內部類和外部類的關係
以下通過代碼來展現內部類與外部類的關係:
public class OutClassTest {
private String o1 = “外部類的變數111”;
private static String o2 = “外部類的靜態變數222”;
public void outMethod()
{
System.out.println( “外部類的方法。” );
}
/* public C c = new C();外部類根本不知道局部內部類的存在,所以訪問不了 */
class InClassTest {
public String i1 = “222”;
A a = new A();
InClassTest2 test2 = new InClassTest2();
/**
* 非靜態內部類可以直接訪問所有的外部類的成員
*/
public void inMethod()
{
System.out.println( “非靜態內部類的方法。” );
outMethod();
System.out.println( o1 );
System.out.println( test2.i2 );
System.out.println( a.a );
}
}
class InClassTest2 {
public String i2 = “333”;
}
public static class A {
public int a = 10;
public static int b = 100;
/* InClassTest inClassTest=new InClassTest(); */
public void aMethod()
{
System.out.println( “靜態內部類的方法。” );
B b = new B();
/**
* 靜態內部類可直接訪問外部類的靜態成員,但不能直接訪問外部類的非靜態成員,需要實例化
*/
System.out.println( o2 );
OutClassTest outClassTest = new OutClassTest();
outClassTest.outMethod();
System.out.println( outClassTest.o1 );
}
}
public static class B {
public int a = 20;
public static int b = 200;
}
public void cMethod()
{
/**
* 局部內部類跟實例內部類一樣能訪問外部類的所有成員
* @author Administrator
*
*/
class C {
private int a = 30;
public int aa = 300;
}
}
public static void main( String[] args )
{
OutClassTest out = new OutClassTest();
out.outMethod();
/**
* 在外部類中不能直接訪問內部類的成員,必須通過內部類的實例才可訪問
*/
OutClassTest.InClassTest test = new OutClassTest().new InClassTest();
/*
* 外部類中可直接訪問靜態內部類中的靜態變數,若要訪問靜態內部類中非靜態變數則需要實例化才行
*/
System.out.println( A.b );
OutClassTest.A in = new OutClassTest.A();
in.a = 1000;
System.out.println( “” + in.a );
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151418.html