• ---内部类-----


    **
    *内部类:将一个类定义置入另一个类定义中就叫作“内部类”
    *特点:
    *1.内部类可以访问外部的成员,但外部类不能访问内部的成员。
    *2.外部类的修饰符只有两种:public和默认,而内部类的修饰符可以是public,protected,默认,private
    *3.内部类成员只有在内部类的范围之内是有效的。
    *4.用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
    *内部类的分类:成员内部类,静态内部类,方法内部类,匿名类。
    *成员内部类:将一个类作为另外一个类的成员
    */
    //外部类

    public class OuterClass {
    //外部类的成员
    private String name="zhangsan";
    private int num=10;
    //外部类的方法
    public void outerMethod(){
    //	System.out.println(a);//外部类不能访问内部类的成员
    }
    //内部类
    public class InnerClass{
    //内部类的成员
    private int num=20;
    private int a=30;
    //内部类的方法
    public void innerMethod(){
    System.out.println("OuterClass--->name="+name);//内部类可以访问外部类的成员
    System.out.println("OuterClass--->num="+OuterClass.this.num);//外部类的成员
    System.out.println("InnerClass--->num="+this.num);//内部类的成员
    }
    }
    
    public static void main(String[] args) {
    /*
    * 创建内部类的实例:
    * 外部类.内部类 对象名 = new 外部类().new 内部类();
    */
    OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
    innerClass.innerMethod();
    
    }
    
    }
    

      

    匿名类:

    匿名内部类Anonymous
    可以实现一个接口,或者继承一个父类
    只能实现一个接口
    适合创建那种只需要一次使用的类,不能重复使用。比较常见的是在图形界面编程GUI里用得到。
    匿名内部类要使用外部类的局部变量,必须使用final修饰该局部变量

    public class TestAnonymous {
    public static void main(String[] args) {
    //实现一个接口的匿名内部类
    /*
    * class MyClass implements MyInterface{
    * public void test(){
    * ..
    * }
    * }
    * MyClass myClass = new MyClass();
    * myClass.test();
    */
    new MyInterface() {
    public void test() {
    System.out.println("测试匿名内部的test方法....");
    }
    }.test();
    /*
    * 继承的匿名类。
    * class MyThread extends Thread{
    * public void run(){
    * .... 
    * }
    * }
    * MyThread myThread = new MyThread();
    * myThread.start();
    */
    new Thread(){
    public void run() {
    System.out.println("Thread....run方法...");
    }
    }.start();
    }
    }
    
    

      

    方法内部类:在方法中定义的内部类。如果方法内部类中需要访问方法中局部变量,该局部变量必须使用final修饰

    public class OuterClass3 {
    // 外部类的成员
    private String name = "zhangsan";
    private int num = 10;
    
    // 外部类的方法
    public void outerMethod(){
    //方法内部类
    class InnerClass{
    //内部类的成员
    private final int num=20;
    private int a=30;
    //内部类的方法
    public void innerMethod(){
    System.out.println("OuterClass--->name="+name);//内部类可以访问外部类的成员
    System.out.println("OuterClass--->num="+OuterClass3.this.num);//外部类的成员
    System.out.println("InnerClass--->num="+num);//内部类的成员
    }
    }
    InnerClass innerClass = new InnerClass();
    innerClass.innerMethod();
    }
    
    public static void main(String[] args) {
    OuterClass3 outerClass = new OuterClass3();
    outerClass.outerMethod();
    }
    
    }
    
     
    

      

    静态内部类:使用static修饰的内部类。静态内部只能访问外部的静态成员。

    public class OuterClass3 {
    // 外部类的成员
    private String name = "zhangsan";
    private int num = 10;
    
    // 外部类的方法
    public void outerMethod(){
    //方法内部类
    class InnerClass{
    //内部类的成员
    private final int num=20;
    private int a=30;
    //内部类的方法
    public void innerMethod(){
    System.out.println("OuterClass--->name="+name);//内部类可以访问外部类的成员
    System.out.println("OuterClass--->num="+OuterClass3.this.num);//外部类的成员
    System.out.println("InnerClass--->num="+num);//内部类的成员
    }
    }
    InnerClass innerClass = new InnerClass();
    innerClass.innerMethod();
    }
    
    public static void main(String[] args) {
    OuterClass3 outerClass = new OuterClass3();
    outerClass.outerMethod();
    }
    
    }
    
     
    

      

  • 相关阅读:
    狗 日 的 360
    Django搭建简单的站点
    ZOJ 3675 Trim the Nails(bfs)
    Qt移动应用开发(二):使用动画框架
    SPOJ QTREE2 lct
    [Phonegap+Sencha Touch] 移动开发77 Cordova Hot Code Push插件实现自己主动更新App的Web内容
    Bitmap工具类BitmapHelper
    Material-design icon生成插件
    闲聊ROOT权限——ROOT权限的前世今生
    Java深入浅出系列(四)——深入剖析动态代理--从静态代理到动态代理的演化
  • 原文地址:https://www.cnblogs.com/benpaozhimeng/p/6979830.html
Copyright © 2020-2023  润新知