1. 程式人生 > >各種內部類的總結

各種內部類的總結

trac 私有化 成員訪問 註意 log 創建 sof args size

面向對象程序設計中,可以在一個類的內部定義另一個類,這個類叫做內部類。內部類分為3種,成員內部類,局部內部類和匿名內部類。

成員內部類

1.成員內部類位於一個類內部的成員位置,可以訪問外部類中私有化的變量,方法等。

2.成員內部類可以被私有化或者靜態,靜態內部類只能訪問外部類中靜態的成員。私有化封裝的內部類只能通過外部類的成員訪問。具體知識點用代碼演示。

package 面向對象;
//成員內部類。
class Person
{
     int a=6;
    
     class Hand
    {
        int a=5;
        public void test_1()
        {
            
int a=4; System.out.println(Person.this.a);//外部類變量用類名.this修飾。 System.out.println(this.a);//內部類變量用this修飾。 System.out.println(a);//內部類的方法內的變量不用修飾。 } } } public class Test_5 { public static void main(String[] args) { Person.Hand c= new Person(). new
Hand();//註意直接創建內部類對象的格式。 //如果內部類為靜態則創建方式為:Person.Hand c=new Person. Hand(); c.test_1(); } }

局部內部類

局部內部類一般位於外部類的成員方法中。局部內部類不能私有化和靜態化。具體知識點如下:

package 面向對象;
//局部內部類。
 class Outer
{
    private int a=5; 
    public void run()
    {
        class Inner//局部內部類不能用static,private修飾。
        {
            
//final int c=30 //局部內部類使用局部變量必須加final。(jdk8以前) public void run_1(final int c) { System.out.println(Outer.this.a); System.out.println(c); } } Inner i=new Inner();//局部內部類完成後需要創建對象。 i.run_1(30); } } public class InnerTest { public static void main(String[] args) { Outer o=new Outer(); o.run(); } }

匿名內部類

使用匿名內部類我們必須要繼承一個父類或者實現一個接口,當然也僅能只繼承一個父類或者實現一個接口。同時它也是沒有class關鍵字,這是因為匿名內部類是直接使用new來生成一個對象的引用。

具體知識點如下

package 面向對象;
interface Inter
{
    public abstract void method();
}
class Test_6
{
    public static Inter function()
    {
        return new Inter()//這裏的內部類實現了inter接口,重寫了method方法。
            {
            public void method()
                {
                    System.out.println("haha");
                }
            };
    }
}
public class InnerClassTest 
{
    public static void main(String[] args)
    {
        Test_6.function().method();
    }
}

各種內部類的總結