Java内部类[成员内部类、局部内部类、匿名内部类和静态内部类],代码讲解

/**
 * 标题:Java内部类[成员内部类、局部内部类、匿名内部类和静态内部类]
 *  * 作者:Nstar
 *  * 时间:2020年3月13日
 *  * 内容:
 *  * 问:什么是内部类?
 * 答:在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
 */
public class Test13 {    //测试类,用于测试案例
    public static void main(String[] args) {
         Test_A ts= new Test_A();       //成员内部类实现 ,首先new一个外部类得对象,
         Test_A.Test_B ab = ts.new Test_B();   //得到外部类对象之后可以通过外部类对象创建内部类对象,
        //因为内部类得形成时依赖于外部类。
         ab.spek();   //通过对象调用方法


        Test_E.Test_F ts_f= new Test_E.Test_F();    //此案例得实现是基于内部静态类实现得
        //因为内部类使用static关键字修饰,所以它的对象创建不需要依赖于外部类
                   ts_f.print_f();   //通过对象调用方法


        Myintface mi = new Myintface(){    //内部匿名类实现,
//            语法:new 接口名/类名()
//            {
//             匿名内部类的类体
//             }
            @Override    //  Java注解,不写也可以
            public void fun(){     //重写接口中的fun抽象方法
                System.out.println("匿名内部类");
            }
        };   //千万不要忘掉分号,因为创建的匿名内部类是一个语句
                   mi.fun();   //通过对象调用匿名内部类的方法
    }
    }

class Test_A{    // [成员内部类案例]
    // Test_A类属于Test_B类的外部类,如果Test_A类去访问Test_B的成员或方法,必须先创建一个成员内部类的对象
    class Test_B{    //Test_A类的内部成员类
        // 此类可以无条件访问Test_A类的方法和成员包括private修饰的方法和成员
        void spek(){    //内部类Test_B的方法
            System.out.println("成员内部类,Test_B类的方法!");
        }
    }
}
class Test_C{   //[局部内部类案例]
    void test_c(){  //类Test_C的方法
        class Test_D{  //Test_D属于局部内部类  ,访问权限仅限于test_c方法中
            //局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。
            void test_d1(){     //局部内部类的方法
                System.out.println("Test_D类的方法!");
            }
        }
    }
}
class Test_E{    //[静态内部类案例]
    static class Test_F{     //因为被static修饰后,创建它的对象时不需要依赖于Test_E类,创建对象时不需要先new一个Test_E类的对象
        void print_f(){
            System.out.println("Test_F静态内部类的方法");
        }
    }

}
interface Myintface{
    void fun();   //记住,Java规定,接口中除了默认方法和静态方法,其它方法全抽象
}





发布了13 篇原创文章 · 获赞 0 · 访问量 262

猜你喜欢

转载自blog.csdn.net/ChinaNebula/article/details/104893067