前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java--多态性之嵌套类

Java--多态性之嵌套类

作者头像
SuperHeroes
发布2018-05-22 16:11:56
5390
发布2018-05-22 16:11:56
举报
文章被收录于专栏:云霄雨霁云霄雨霁

上一篇:多态性之内部类和匿名类

嵌套类:

嵌套类即 static 内部类,必须记住内部类的对象默认持有创建它的那个封装类的一个对象的句柄。然而,假如我们说一个内部类是static 的,这种说法却是不成立的。嵌套类意味着:

  1. 为创建一个 static 内部类的对象,我们不需要一个外部类对象
  2. 不能从嵌套类的对象中访问非静态的外围类对象

嵌套内部类和普通内部类还有一个区别。普通内部类不能含有static数据和static字段,也不能包含嵌套类。但嵌套类可以包含这些东西。

  • 静态内部类才可以声明静态方法 
  • 静态方法不可以使用非静态变量 
  • 抽象方法不可以有函数体 

针对第一条“为创建一个 static 内部类的对象而不需要一个外部类对象”,那么可将所有东西都设为static。为了能正常 工作,同时也必须将内部类设为static:

代码语言:javascript
复制
abstract class Con {
    abstract public int value();
}
public class Per{
    private static class PCon extends Con{    //静态内部类
        private int i = 11;
        public int value() { return i; }
    }
    public static Con cont() {    //静态方法
        return new PCon();
    }
    public static void main(String[] args) {
        Con c = cont();   //不需要创建封装类
    }
}

static内部类可以成为接口的一部分----因为类是“静态”的,所以它不会违反接口的规则(static 内部类只位于接口的命名空间内部):

代码语言:javascript
复制
interface IInterface {
    static class Inner {
        int i, j, k;
        void f() {}
    }
} 

生成内部类对象:

普通内部类--除非已拥有外部类的一个对象,否则不可能创建内部类的一个对象:

代码语言:javascript
复制
public class Par {
    class Contents {    //内部类
        private int i = 11;
        public int value() { return i; }
    }
    public static void main(String[] args) {
        Par p = new Par();    //需要外部类
        Par.Contents c = p.new Contents();    //创建内部类
    }
}

static内部类--不需要指向外部类对象的一个句柄:

代码语言:javascript
复制
public class Par {
    static class Contents {    //静态内部类
        private int i = 11;
        public int value() { return i; }
    }
    public static void main(String[] args) {
        //不需要封装类(外部类)
        Contents c = new Contents();    //创建内部类
    }
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档