黑马程序员技术交流社区

标题: java内部类的使用和调用 [打印本页]

作者: 15173139267    时间: 2015-9-15 20:50
标题: java内部类的使用和调用
/**
*关于内部类的使用和如何调用  ?
*/
public class IoArr{
        class Student{
                private String name;
                public Student(String name){
                        this.name = name;
                        System.out.println("my name is :"+this.name);
                }
        }
        public static void main(String[] args) {
                String name = "lxb";
                IoArr.Student io  = new IoArr.Student(name);
        }
}


作者: Coolman    时间: 2015-9-15 20:50
15173139267 发表于 2015-9-15 21:05
额,朋友。 能不能把我上面的那段小代码写通。 我用你的方式,好像行不通。IoArr.Student io  = IoArr.St ...

你没注意看,我已经贴过代码了,都要创建对象
作者: Coolman    时间: 2015-9-15 20:56
本帖最后由 Coolman 于 2015-9-15 20:59 编辑

内部类可以直接访问所在外部类的成员,包括私有;外部类要访问内部类的成员,要创建对象。
你这是成员内部类,成员内部类创建对象:外部类名.内部类名 对象名 = 外部类对象.内部类对象
  1. IoArr.Student io = new IoArr().new Student(name);
复制代码




作者: lizhichao    时间: 2015-9-15 21:02
本帖最后由 lizhichao 于 2015-9-15 21:03 编辑

外部类.内部累调用    对象名=new外部().new内部();
1 在内部累调用外部类的参数 外部类的成员参数需要final修饰。(JDK1.8不需要final)
2在内部类使用外部类的方法直接写方法名。
3匿名内部类。new继承类(){};就是匿名子类对象。就是一个不能被二次使用的对象。简单吧?
作者: 15173139267    时间: 2015-9-15 21:05
Coolman 发表于 2015-9-15 20:56
内部类可以直接访问所在外部类的成员,包括私有;外部类要访问内部类的成员,要创建对象。
你这是成员内部 ...

额,朋友。 能不能把我上面的那段小代码写通。 我用你的方式,好像行不通。IoArr.Student io  = IoArr.Student(name);    这样还是报错。 虽然可能你的方式是对的,但是我不知道我哪里错了。
作者: xiaoya0o0o    时间: 2015-9-15 21:08
本帖最后由 xiaoya0o0o 于 2015-9-15 21:12 编辑

上面调用: String name = "lxb";
            IoArr.Student io  = new IoArr().new Student(name);

1,内部类。
        1.1 内部类的由来:因为访问的特点。一个类如果直接访问另一个类中的成员,建议写内部类。
        1.2 内部类出现后访问特点:
                内部类可以直接访问外部类的成员,包括私有的。
                外部类要访问内部类需要创建内部类的对象。
        1.3 内部类在成员位置可以给成员修饰符所修饰。★★★
                public : 格式 外部类名.内部类名  变量名 = new 外部类().new 内部类();
                static :
                        情况一:访问静态内部类中的非静态成员。
                                外部类名.内部类名  变量名 = new 外部类名.内部类名();
                        情况二:访问静态内部类中的静态成员。
                                外部类名.内部类名.静态成员;
                注意事项:
                        1,非静态内部类中,不允许定义静态成员,只可以定被final修饰的static常量。
                        2,外部类的静态方法要访问内部类,需要创建内部类的对象,一定要注意,该内部类必须被静态修饰。
                                否则,只能通过外部类对象.内部类对象的方式访问。看以下代码演示。

                class Outer
                {
                        static class Inner1
                        {
                        }

                        class Inner2
                        {
                        }

                        public static void method()
                        {
                                //访问Inner1.
                                new Inner1();

                                //访问Inner2非静态。
                                new Outer().new Inner2();

                        }

                }

        
        1.4 非静态内部类之所以可以直接访问外部类中的成员:原因是内部类持有了 外部类名.this
        1.5 局部内部类。
                局部内部类一样可以直接访问我外部类中的成员。
                注意:局部内部类不能直接访问局部中的变量:局部变量生命周期太短,很有可能局部变量已消失,而内部类对象还在。
                          局部内部类只能访问被final修饰的局部变量,因为是一个常量,值不变。
        1.6 内部类是可以继承其他类和实现接口的。★★★★
                如果内部类不需要对外提供,可以通过其继承的父类或者实现的接口,这种公共的类型对外提供。
2,匿名内部类。
        其实就是对1.6的简化书写。
        原理:匿名内部列其实就是一个子类对象。
        格式:new 父类or接口(){子类内容}

        如果实在接收不了匿名内部类的格式,可以还原成内部类。

        其实InnerClassDemo7.java涉及的练习以及面试题要动手做?并写出原因。
        
        通常匿名内部类中的方式不要过多(少于两个),以免降低阅读性。
interface Inter
{
        void show(int a,int b);
        void func();
}
class Demo
{
        public static void main(String[] args)
        {
                /用匿名内部类
                Inter in = new Inter()
                {
                        public void show(int a,int b)
                        {
                                System.out.println(a+b);
                        }
                        public void func(){}
                };
                in.show(3,4);
                in.func();

        }
}



作者: zzq18217362451    时间: 2015-9-16 00:13
好牛啊,赞一个




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