黑马程序员技术交流社区

标题: 刚敲出来的问题,求解决! [打印本页]

作者: 炀bin    时间: 2014-9-5 18:41
标题: 刚敲出来的问题,求解决!
外部类静态方法可以访问静态内部类,但静态内部类里的成员可以是非静态,为什么行得通呢?

        Outer o=new Outer();
        o.method();

class Outer
{
    public static void method(){   
        Inner inner = new Inner();
        System.out.println(inner.age);
        inner.getInnerName();
    }
    static class Inner
    {
        int age;
        public void getInnerName(){
            System.out.println(age);
        }
    }
}

作者: Seven`    时间: 2014-9-5 18:41
静态类的内部可以定义非静态成员吧,如果反过来,非静态的类的内部是不能定义静态成员的
作者: Seven`    时间: 2014-9-5 20:48
Seven` 发表于 2014-9-5 20:46
静态类的内部可以定义非静态成员吧,如果反过来,非静态的类的内部是不能定义静态成员的 ...

补充下,我说的是内部类
作者: 柳超    时间: 2014-9-5 22:13
外部类的静态方法只能调用静态的成员,这个是肯定的,不用多讲了吧
内部类你现在把他当成一个成员,那么给他加静态的作用就是可以让类名打点调用,如果成员中有静态方法那么定义静态也可以让成员方法调用,
内部类也是一个类,外部是不是静态和他没有什么关系,一个类中是可以定义静态成员和非静态成员的

如果你有学过其他语言可能会不一样那我觉得你需要单独记忆这个东西了
作者: AlanHand    时间: 2014-9-7 14:43
二楼的正解
作者: 思维    时间: 2014-9-10 22:24
静态内部了说白了其属性是外部类的属性,只是出于内部类的位置上。
作者: however_    时间: 2014-9-11 11:25
这个与静态内部类成员是不是静态无关,只要这个类是静态内部类就可以了,因为你首先是在访问这个类
作者: Java黑马    时间: 2014-9-14 09:34
好像记得静态内部类可以直接当外部类使用的
作者: 2100    时间: 2014-9-15 06:58
静态内部类是随类一起加载进内存的,也就是没有创建对象之前就可以使用,而其它的一些方法、内部类是需要创建对象才能使用的,希望能够帮到你
作者: 臭和尚    时间: 2014-9-23 00:13
静态类意思是方法是静态,可以通过类名.直接调用,不用再堆内存中开辟空间;
成员变量设置成静态非静态与类没有关系啊
作者: 英雄传说ER    时间: 2014-10-14 17:29
同学你好  面向对象的一个重要特征封装 封装的意义就是你只要知道它能做什么事就可以了 具体怎么做 你不用管
外部类你就把他当一个类 这个类有成员变量 成员函数
内部类你可以理解为他就是一个成员函数 只是这个成员函数内容比较多 封装成了类的形式 它里面定义静态,非静态,调用了什么都跟外部类没关系 外部类只要知道这个内部类能实现什么功能就行 具体怎么实现不需要知道
作者: 79819275    时间: 2014-11-1 22:31
静态内部类,就相当于是单独提出来的类(外部类),不在是内部类了好么
作者: 王会涛    时间: 2014-11-11 08:33
学习了,谢谢
作者: 1103--英伦风格    时间: 2014-11-20 21:18
因为Inner是个类,而不是你说的方法,一个类当然可以访问非静态了,这里面的static相当于可以不用定义外部类的对象来调用它,可以直接用类名new Outer.Inner()来创建内部类对象。
作者: 1103--英伦风格    时间: 2014-11-22 21:40
内部类的static知识方便调用外部类的成员变量和方法,而内部类是一个类,当然可以访问静态和非静态了。但匿名内部类又不一样了,没被static修饰的匿名内部类不能访问非静态变量。
作者: bjznh    时间: 2014-12-16 13:43
学习中啊,哈哈
作者: rxlyw    时间: 2015-1-6 21:57
静态内部类里面的方法可以使静态的也可以是非静态的,如果内部类中有static修饰的,则内部类必须是静态的,static修饰的内部类已经随着外部类的加载而加载了,也就是说静态内部类中的方法也也已经加载进方法区了。说的可能不是很详细,还有疑问可以提出




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2