码迷,mamicode.com
首页 > 其他好文 > 详细

内部类

时间:2016-03-31 10:45:50      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

 内部类:一个类定义在另外一个类的内部,那么该类就称作为内部类。

内部类的class文件名: 外部类$内部类.  好处:便于区分该class文件是属于哪个外

部类的。

内部类的类别:

 1. 成员内部类:        成员内部类的访问方式:            方式一:在外部类提供一个方法创建内部类的对象进行访问。            方式2二:在其他类直接创建内部类的对象。 格式:外部类.内部类  变量名 = new 外部类().new 内部类();        注意: 如果是一个静态内部类,那么在其他类创建 的格式:      外部类.内部类  变量名 = new 外部类.内部类();

     内部类的应用场景: 我们在描述A事物的时候,发现描述的A事物内部还存在另外一个比较      复杂的事物B时候,而且这个比较复杂事物B还需要访问A事物的属性等数据,那么这时候      我们就可以使用内部类描述B事物。

     比如: 人--->心脏

     class 人{        血

   氧气

   等....

   class 心脏{        }  

     }

     内部类的好处:内部类可以直接访问外部类的所有成员。

       内部类要注意的细节:     1. 如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量。        可以通过"外部类.this.成员变量名" 指定访问外部类的 成员。     2. 私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象了。     3. 成员内部类一旦出现了静态的成员,那么该类也必须 使用static修饰。

 

 局部内部类:在一个类 的方法内部定义另外一个类,那么另外一个类就称作为局部内部类。

局部内部类要注意的细节:  1. 如果局部 内部类访问了一个局部变量,那么该局部变量必须使用final修饰、

 

 

//外部类
class Outer{
    
    //成员变量
    int x = 100; // Outer.class文件被加载到内存的时候存在内存中。  静态的成员数据是不需要对象存在才能访问。

    //成员内部类
    static    class Inner{      
        
        static    int i = 10;

        public void print(){
            System.out.println("这个是成员内部类的print方法!"+i);
        }
    }
    
    //在外部的方法中创建了内部类的对象,然后调用内部 方法。
    public void instance(){
        Inner inner = new Inner();
        inner.print();
    }

}

//其他类
class Demo4 
{
    public static void main(String[] args) 
    {
        Outer.Inner inner = new Outer.Inner();
        inner.print();
    }
}

 

匿名内部类:没有类名的类就称作为匿名内部类。

匿名内部类的好处:简化书写。

匿名内部类的使用前提:必须存在继承或者实现关系才能使用。

匿名内部类一般是用于实参。

abstract class Animal{
    
    public abstract Animal run();

    public abstract void sleep();
}

class Outer{
    public void print(){
        //需求: 在方法内部定义一个类继承Animal类,然后调用run方法与sleep()。
        
        //局部内部类
        class Dog extends Animal{
            public void run(){
                System.out.println("狗在跑..");
            }

            public void sleep(){
                System.out.println("狗趴在睁开眼睛睡..");
            }
        }
        //创建对象
        Dog d = new Dog();
        d.run();    
        d.sleep();
    }
}

        //匿名内部类 :匿名内部类只是没有类名,其他的一概成员都是具备的。
        // 匿名内部类与Animal是继承 的关系。  目前是创建Animal子类的对象. 
class Outer{
    public void print(){
    Animal    a = new Animal(){  //多态
        
            //匿名内部的成员 
            public Animal run(){
                System.out.println("狗在跑..");
                return this;
            }
            public void sleep(){
                System.out.println("狗趴在睁开眼睛睡..");
            }

            //特有的方法
            public void bite(){
                System.out.println("狗在咬人..");
            }
        };
    
        a.bite();
        a.run();
        a.sleep();
        
    }
}

class Demo6 
{
    public static void main(String[] args) 
    {
        Outer outer = new Outer();
        outer.print();
    }
}

 

内部类

标签:

原文地址:http://www.cnblogs.com/gyn1994/p/5340187.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!