zoukankan      html  css  js  c++  java
  • 内部类

     在上一节里给大家留了一个算法,不知大家做得怎样了,现在给出这个算法的参考程序代码。

    public class Sum1_5

    {

    /**

     * @param args

     */

    public static void main(String[] args)

    {

    System.out.println(sum(100));

    }

    public static int sum(int x)

    {

    int mSum=0;

    if(x%2==1)

    {

    mSum=(1+x)*x/2+(1+x)/2+1;

    }

    else

    {

    mSum=(1+x)*x/2;

    }

    return mSum;

    }

    }

    这是我们优化以后的算法,由于算法很简单,所以这里就不再详细地去解读了。

    接下来,我们学习一个新的内容,内部类。顾名思义,内部类就是包含在一个类里面的类了,包含内部类的类称为这个类的外部类或者父类。

    内部类作为外部类的一个成员,应该拥有类成员的一般性质,我们可以将内部类设置权限为public,private或者protected,当然,不同的权限就对应不同的操作了,这跟其它类成员类似,这里就不多讲了。

    我们要注意的一个问题是,既然我们可以在一个普通类里申明一个static成员,那么我们能否在一个内部类里也申明一个static成员呢?我们来写个这样的程序验证一下:

    public class InnerClass2_1

    {

    /**

     * @param args

     */

    public static void main(String[] args)

    {

    class A

    {

    public static int x;

    public A()

    {

    x=0;

    }

    }

    }

    }

    我们会发现,编译器会报错,错误信息为:The field x cannot be declared static; static fields can only be declared in static or top level types,也就是说,x不能够被申明为静态类型,静态类型只能够被定义在静态成员或者顶层成员内。有的同学会问,如果将内部类也加一个权限修饰符static,是否可以在内部类里定义static类型的数据了呢?答案也是否定的。因为内部类不能够被申明为static类型,我们知道被申明为static类型的成员实际上已经不属于这个类了,那么如果我们将内部类也申明为static类型,也就是说,内部类也不属于这个类了,这跟内部类的定义相悖。

    另外,内部类既可以定义在一个普通类里,也可以定义在一个普通类的方法里。

    所以,我们不能在内部类里定义static成员,同时也不能将内部类定义为外部类的static成员。下面给出上面经修改后的程序,仔细体会一下内部类的功能与特征。

    public class InnerClass2_1

    {

    /**

     * @param args

     */

    public static void main(String[] args)

    {

    class A

    {

    public A()

    {

    System.out.println("I am the constructor of the inner class");

    }

    }

    new A();

    System.out.println("I am the main class");

    }

    }

    运行结果为:

    I am the constructor of the inner class

    I am the main class

    另外一种写法也可以得到同样的结果:

    public class InnerClass2_1

    {

    /**

     * @param args

     */

    public static void main(String[] args)

    {

    new A();

    System.out.println("I am the main class");

    }

    static public class A

    {

    public A()

    {

    System.out.println("I am the constructor of the inner class");

    }

    }

    }

    在这种写法中需要注意的是,我们讲过,一个静态方法只能访问静态成员,因main()方法是一个静态方法,所以在访问类A的时候,A必须要申明为静态类。

    内部类是一个比较重要的概念,但实际项目中运用得比较少,但作为学习Java的同学,掌握内部类的使用方法和相关特征是有必要的,在中级篇里讲多线程时会继续用到内部类的概念,因此,望广大学者务必下去多了解一下内部类。

    在这节的最后留下一个题目,题目内容是:请新建一个主类,在主类的main()方法里定义一个子类,命名为A,创建一个子类B作为主类的一个成员。在main()方法中,分别对AB进行访问。

  • 相关阅读:
    js下数据库 nedb lokijs
    ssh连接docker镜像ubuntu与debian
    Mint wine
    javscript 实现iframe加载内容页出现LOADING效果
    PHP 换行处理
    清风徐来
    php打包下载文件
    Jplayer用法
    js常用方法
    php环境搭建以及优化
  • 原文地址:https://www.cnblogs.com/jeancandoit/p/2306701.html
Copyright © 2011-2022 走看看