A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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().方法名或变量名  ??????

11 个回复

倒序浏览
额 ,这个问题很低级吗。。。。⊙﹏⊙b汗
回复 使用道具 举报
我看不明白你想干嘛。。。
回复 使用道具 举报
lzhuas 发表于 2014-4-30 17:20
我看不明白你想干嘛。。。

我当然是想在内部静态类里调用外部类非静态方法和变量  
回复 使用道具 举报
这代码真心看不懂:dizzy:
回复 使用道具 举报
静态内部类是可以访问外部类或者其它类中的非静态成员的。
访问的方式是需要先建立外部类或者其它类的对象,然后通过对象访问非静态成员

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";
}

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
实例化外部类后再进行调用即可。
回复 使用道具 举报
  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出外部类的实例或其他类的实例来调用来中的成员和方法,这样做事可行的。
复制代码
回复 使用道具 举报 1 0
爱翚 发表于 2014-5-1 19:06
静态内部类是可以访问外部类或者其它类中的非静态成员的。
访问的方式是需要先建立外部类或者其它类的对象 ...

Soga 这样是可以的  我怎么记得静态只能访问静态,话说 静态的作用到底是什么 越往后越晕乎啊
回复 使用道具 举报
段兆洋 发表于 2014-5-8 16:04
Soga 这样是可以的  我怎么记得静态只能访问静态,话说 静态的作用到底是什么 越往后越晕乎啊 ...

额 ,我忽略了一个名词,直接访问。。。。
回复 使用道具 举报
不能,你只要记住静态只能访问静态就行了,如果确实需要访问,就把它也变静态
回复 使用道具 举报

((inner) new Outer().inner()).f();   和 new Outer().inner().f();  是一样的不?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马