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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bianzhiguo6 高级黑马   /  2015-4-29 11:07  /  1661 人查看  /  27 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

面向对象:(静态内部类)

内部类的访问规则:
1,内部类可以直接访问外部类的成员,包括私有。
   之所以可以直接访问外部类中的成员,是因为内部类中持有一个外部类的引用,外部类名.this
2,外部类要访问内部类,必须建立内部类对象。
访问格式:
    1,当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象
       格式:
       外部类名.内部类名  变量名  = 外部类对象  内部类对象
       Outer.Inter in = new Outer().new Inter();
    2,当内部类在成员位置上,就可以被成员修饰符所修饰。
比如,private;将内部类在外部类中进行封装。
     static:内部类就具备static的特性。
当内部类被static修饰后,只能直接访问外部类中的static成员,出现了访问局限。

在外部其他类中,如何直接访问static内部类的非静态成员呢?
new Outer.Inter().function();

   在外部其他类中,如何直接访问static内部类的静态成员?
Outer.Inter.function();

注意:当内部类中定义了静态成员,该内部类必须是static的。(不是重点,单要掌握)
      当外部类中的静态方法访问内部类时,内部类也必须是static的。


面向对象:(内部类定义原则)
原则:1,当该类需要直接访问某类的成员时,将该类定义在其类的内部。(就好像心脏类定义在人体内)
      2,当该类定义在某类中时,最好使用private进行私有封装,防止别类访问。
      3,当其他类要是想访问内部类时,可以提供一个访问方法如下:
例:
class body
{
    private class xinZang
     {
      //方法体

     }
    public void show()
     {
     new xinZang().方法体 ;
     }

}

面向对象(匿名内部类)
内部类定义在局部时,
1,不可以被成员修饰符修饰
2,可以直接访问外部类中的成员,因为还持有外部类中的引用。
   但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量
例如:
class Outer
{
    int x = 3;
    void Inter()
             {
               final int y =4;//只能是静态才能调用
               class Inter
                        {
                          void function();
                                       {
                                       System.out.println(y);
                                       }
                        }
                        new Inter().function();
             }
}
class InnerClassDemo
{
          public static void main(String[]args)
            {
            new Outer().method();
            }
}

/*
    匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:
   内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式:new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,可以理解带内容的对象。
5,匿名内部类中定义的方法最好不要超过3个。
*/

class Test
{
        int x = 3;
        class inter   //内部类
        {
                void run()
                {
                System.out.println("数值为:"+x);
                }
        }
        void function()  //创建方法,调用内部类方法
        {
        inter in = new inter();
        in.run();
        }
}
public class Demo
{
        public static void main(String[]args)
        {
        Test test = new Test();   //创建对象
        test.function();
        }
}
-----------------------------演变过程---------------------------------------
abstract class Fu
{
        abstract void run();
}
class Test
{
        int x = 3;
        void function()   
        {
        new Fu()    //创建子类对象
                {
                void run()
                        {
                        System.out.println("数值为:"+x);
                        }
                }.run();
        }
}
public class Demo
{
        public static void main(String[]args)
        {
        Test test = new Test();   //创建对象
        test.function();
        }
}

27 个回复

倒序浏览
自顶一下,内部类还是比较容易迷惑的。希望有迷惑的小伙伴能看到
回复 使用道具 举报
应该是0416的同学,后天就要学新的编程软件了
回复 使用道具 举报
真好 值得学习  
回复 使用道具 举报
怪学究 发表于 2015-4-30 00:15
应该是0416的同学,后天就要学新的编程软件了

哈哈,兄台已经进班学习了?
回复 使用道具 举报

嘿嘿,大家互相学习。容易迷惑的一起比较弄懂比较好。
回复 使用道具 举报
太棒了
回复 使用道具 举报
可以学习下
回复 使用道具 举报

互相学习才能进步!
回复 使用道具 举报
不错 很具体啊
回复 使用道具 举报
顶!!受教了
回复 使用道具 举报
bianzhiguo6 发表于 2015-4-30 09:16
哈哈,兄台已经进班学习了?

对啊,学的不好●﹏●
回复 使用道具 举报
怪学究 发表于 2015-4-30 12:24
对啊,学的不好●﹏●

哈哈 坚持学习就是进步,给你加油,我还没进呢,学校事还没处理完,六月去黑马
回复 使用道具 举报
大神,求黑马币,求技术分、
回复 使用道具 举报

嘿嘿,有用就好
回复 使用道具 举报

嘿嘿,有用就好
回复 使用道具 举报

嘿嘿,相互学习{:3_52:}
回复 使用道具 举报
msxhm 发表于 2015-6-9 22:29
大神,求黑马币,求技术分、

尴尬,现在才看见。哈哈,你的技术分眼看要到了,不够的话,给你送点!
回复 使用道具 举报
twa42 中级黑马 2015-6-15 09:16:08
19#
很好,赞一个
回复 使用道具 举报
顶一个
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马