黑马程序员技术交流社区

标题: 内部静态类访问外部非静态方法问题!!! [打印本页]

作者: 段兆洋    时间: 2014-4-30 12:52
标题: 内部静态类访问外部非静态方法问题!!!
interface Test
{
        void func();
}
class Demo
{
        public static void main(String[] args)
        {
                //补足代码;(匿名内部类)
               
                new Demo().show(new Test()
                {
                        public void func(){}
                });
               
        }
        void show(Test t)
        {
                t.func();
        }
}

众所周知,大家,上面这个是静态方法通过对象访问非静态方法!

class Outer
{
        private static int x = 3;

       
        static class Inner//静态内部类
        {
                static void function()
                {
                        System.out.println("innner :"+x);
                }
        }

然后 我们也知道,上面的例子:内部静态类只能访问静态的x;那我想问下 内部静态类可以通过访问Outer或其他外部类对象来调用非静态方法和非静态成员变量么?比如:new Outer().方法名或变量名  ??????
作者: 段兆洋    时间: 2014-4-30 15:56
额 ,这个问题很低级吗。。。。⊙﹏⊙b汗
作者: lzhuas    时间: 2014-4-30 17:20
我看不明白你想干嘛。。。
作者: 段兆洋    时间: 2014-4-30 17:39
lzhuas 发表于 2014-4-30 17:20
我看不明白你想干嘛。。。

我当然是想在内部静态类里调用外部类非静态方法和变量  
作者: 王春蕾    时间: 2014-5-1 18:54
这代码真心看不懂:dizzy:
作者: 爱翚    时间: 2014-5-1 19:06
静态内部类是可以访问外部类或者其它类中的非静态成员的。
访问的方式是需要先建立外部类或者其它类的对象,然后通过对象访问非静态成员

class Outer {
        private int num = 10000;
        private static int x = 3;
        static class Inner{// 静态内部类
                static void function() {
                        System.out.println("innner :" + x);//打印结果3
                       
                        //定义内部类所属类的对象
                        Outer outer = new Outer();
                        //打印内部类所属类中的非静态成员变量的值
                        System.out.println(outer.num);//打印结果10000
                       
                        //实例化这个外部类的对象
                        OuterDemo od = new OuterDemo();
                        //打印外部类中的非静态成员变量的值
                        System.out.println(od.str);//打印结果hello
                }
        }
        public static void main(String[] args){
                Inner.function();
        }
}
//定义一个其它的外部类
class OuterDemo {
    public String str = "hello";
}
作者: gma103    时间: 2014-5-1 19:36
实例化外部类后再进行调用即可。
作者: Lin0411    时间: 2014-5-1 20:53
  1. public class test1
  2. {

  3.         public static void main(String[] args)        
  4.         {
  5.                 ((inner) new Outer().inner()).f();
  6.         }

  7. }

  8. class Outer
  9. {
  10.         public void show()
  11.         {
  12.                 System.out.println("test");
  13.         }
  14.        
  15.         public Object inner() {
  16.                 // TODO Auto-generated method stub
  17.                 return null;
  18.         }

  19.         static class inner
  20.         {
  21.                 public static void f()
  22.                 {
  23.                         new Outer().show();
  24.                 }
  25.         }
  26. }
  27. 内部静态类中必须new出外部类的实例或其他类的实例来调用来中的成员和方法,这样做事可行的。
复制代码

作者: 段兆洋    时间: 2014-5-8 16:04
爱翚 发表于 2014-5-1 19:06
静态内部类是可以访问外部类或者其它类中的非静态成员的。
访问的方式是需要先建立外部类或者其它类的对象 ...

Soga 这样是可以的  我怎么记得静态只能访问静态,话说 静态的作用到底是什么 越往后越晕乎啊
作者: 段兆洋    时间: 2014-5-12 08:01
段兆洋 发表于 2014-5-8 16:04
Soga 这样是可以的  我怎么记得静态只能访问静态,话说 静态的作用到底是什么 越往后越晕乎啊 ...

额 ,我忽略了一个名词,直接访问。。。。
作者: 黄梁梦想享    时间: 2014-6-5 10:35
不能,你只要记住静态只能访问静态就行了,如果确实需要访问,就把它也变静态
作者: 、海    时间: 2014-6-5 18:28
Lin0411 发表于 2014-5-1 20:53

((inner) new Outer().inner()).f();   和 new Outer().inner().f();  是一样的不?




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