java嵌套类(静态内部类 非静态内部类 局部内部类 匿名内部类)

//嵌套类分为静态嵌套类和内部类  内部类的其余两种形式:局部类 匿名内部类
// 外部类   内部类使“多重继承”的解决方案变得更加完整。
/* 1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。
 * 2.静态内部类只能够访问外部类的静态成员,而非静态内部类则可以访问外部类的所有成员(方法,属性)。
 */
public class CloneTest01 {
    private String a;
    private  static String b;
    private static void outPrint(){}
    private  void outPrint2(){}

    public static void main(String[] args) {
// 3、静态类和方法只属于类本身,并不属于该类的对象,更不属于其他外部类的对象。
        CloneTest01 ct=new CloneTest01();
       //4.1、非静态内部类的实例化: 外部类实例.new  内部类
        Person p=ct.new Person();
       //4.2、静态内部类可以直接实例化  它属于外部类类的,不是外部类实例的
        Student s=new Student();
        class LocalClass{
            private String a;
            public void print(){
                //5、访问方法的局部变量时,变量要加上final修饰
                System.out.println("局部内部类");
            }
        }
        new Runnable(){
            @Override
            public void run() {
                System.out.println("匿名内部类");
            }
        };
    }
      //非静态内部类
      class Person implements Cloneable,Serializable{
// 非静态内部类则不能有静态成员(方法,属性)。
       // private static String name;  //会报错
        private int age;
        public void printA(){
//            可以访问外部类的所有成员(方法,属性)
            System.out.println(a+b);
            outPrint();
            outPrint2();
        }
//        public static void printb(){}   //会报错
    }
    //静态内部类
   static class Student implements Runnable{
 // 静态内部类可以有静态成员(方法,属性)
       private static String name;
       private int age;
       public void printA(){}
       public static void printb(){
           //只能够访问外部类的静态成员(方法,属性)
           System.out.println(b);
           outPrint();
       }
        @Override
        public void run() {
            System.out.println(this.age);
        }
    }

}

 总结:

1.静态内部类可以有静态成员(方法,属性),而非静态内部类则不能有静态成员(方法,属性)。

2.静态内部类只能够访问外部类的静态成员(方法,属性),而非静态内部类则可以访问外部类的所有成员(方法,属性)。

3.静态类和方法只属于类本身,并不属于该类的对象,更不属于其他外部类的对象。

//4.1、非静态内部类的实例化: 外部类实例.new  内部类
        CloneTest01 ct=new CloneTest01();
        Person p=ct.new Person();
       //4.2、静态内部类可以直接实例化  它属于外部类类的,不是外部类实例的
        Student s=new Student();

5、匿名内部类和局部内部类中,访问方法的局部变量时,变量要加上final修饰

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值