zoukankan      html  css  js  c++  java
  • 静态内部类和非静态内部类的区别

    静态内部类和非静态内部类的区别  

     

    如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着: 

    1. 嵌套类的对象,并不需要其外围类的对象。 

    2. 不能从嵌套类的对象中访问非静态的外围类对象。 

    如下所示代码为定义一个静态嵌套类

    public class StaticTest{
       private static String name = "woobo";
       private String num = "X001";
       static class Person{ // 静态内部类可以用public,protected,private修饰 

           // 静态内部类中可以定义静态或者非静态的成员  
         private String address = "China";

    Private Static String x=“as”;
         public String mail = "kongbowoo@yahoo.com.cn";//内部类公有成员
         public void display(){
           //System.out.println(num);//不能直接访问外部类的非静态成员

    // 静态内部类不能访问外部类的非静态成员(包括非静态变量和非静态方法)
           System.out.println(name);//只能直接访问外部类的静态成员

    //静态内部类只能访问外部类的静态成员(包括静态变量和静态方法)
           System.out.println("Inner " + address);//访问本内部类成员。
         }
       }
       public void printInfo(){
         Person person = new Person();

    // 外部类访问内部类的非静态成员:实例化内部类即可 

    person.display();

         //System.out.println(mail);//不可访问
         //System.out.println(address);//不可访问
         System.out.println(person.address);//可以访问内部类的私有成员

    System.out.println(Person.x);// 外部类访问内部类的静态成员:内部类.静态成员
         System.out.println(person.mail);//可以访问内部类的公有成员
       }
       public static void main(String[] args){
         StaticTest staticTest = new StaticTest();
         staticTest.printInfo();
       }
    }
     


    在静态嵌套类内部, 不能访问外部类的非静态成员, 这是由Java语法中"静态方法不能直接访问非静态成员"所限定.注意, 外部类访问内部类的的成员有些特别, 不能直接访问, 但可以通过内部类实例来访问, 这是因为静态嵌套内的所有成员和方法默认为静态的了.同时注意, 内部静态类Person只在类StaticTest 范围内可见, 若在其它类中引用或初始化, 均是错误的.
    一 . 静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 
    二 . 静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;

    三 . 非静态内部类的非静态成员可以访问外部类的非静态变量。

        生成一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类(正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static 的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则)

    源自:http://blog.csdn.net/fgakjfd/article/details/5282646

  • 相关阅读:
    June 26th 2017 Week 26th Monday
    June 25th 2017 Week 26th Sunday
    June 24th 2017 Week 25th Saturday
    June 23rd 2017 Week 25th Friday
    June 22nd 2017 Week 25th Thursday
    2018最佳网页设计:就是要你灵感爆棚!!!
    图片素材类Web原型制作分享-Pexels
    想要打动HR的心,UX设计师求职信究竟应该怎么写?
    【UXPA大赛企业专访】Mockplus:“设计替代开发”将成为现实
    2018年最好的医疗网站设计及配色赏析
  • 原文地址:https://www.cnblogs.com/wzhanke/p/4465238.html
Copyright © 2011-2022 走看看