`
suntting
  • 浏览: 7252 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

内部类inner class

    博客分类:
  • Java
F# 
阅读更多

基本上已经把thinking in java内部类部分学完了
内容比较多 整理下思路

 

简单的分类

内部类(inner class)
-> 匿名内部类
-> 域内部类(local class)
-> 嵌套内部类(nesting class)

 

1. 一般的内部类

 

class A
{
    private class B{}
}

 

特点:
> 可以使用外围内的方法和属性
> 无法定义static变量和方法
> 可以有private和protected访问修饰符(非inner class的类只有public和default2种访问修饰符)

> 在内部类中使用[外部类].this 语法可以获得该内部类的外部类引用

 

2. 域内部类

 

class A
{
    {
        class B{}
    }
}

 

class A
{
    void f()
    {
        int i=0;
        class B{}
    }
}

 

特点:
> 出了域的范围就无法访问, 比如在方法f()中的内部类, 在方法f()外的地方无法被访问
> 如果使用了局部变量(非外围内成员变量) 则该局部变量必需为final, 如class B想使用f()方法中的变量i
则i必需为final

 

3. 匿名内部类

class A{}
class B
{	
    public getA()
   {
        return new A(){};
   }
}

 

4. 嵌套内部类: 就是嵌套的内部类为static class

 

class A
{
    public static class B{}
}

 

特点: 可以在内部类中定义static方法和变量

 

继承一个内部类

 

继承一个内部类时 需要使用到特殊语法来获得其外围类对象

class A
{
    class InnerA{}
}
class B extends InnerA
{
    public B(A a)//class B constructor
    {
        a.super();//使用这个语法编译时才不会报错
    }
}

 

也有种不需要这种语法的情况, 如下

class A{}
class B
{	
	public getA()
	{
		return new A(){};
	}
}

 

class A
{
    class InnerA{}
}
class B extends A
{
    class InnerB extends InnerA{}   
}

 
此时InnerB虽然继承了InnerA, 但是由于其外围类B亦继承了A,
所以就不需要在InnerB的构造器中使用<外围类>.super()的语法了

 

心得体会:

1. 内部类实现了真正的多继承

//内部类实现多继承的示例
class Shape
{
    void drow(){}
}

class Ashape
{
     public class Rectangle extends Shape//长方形继承Shape
     {
          void drow()
         {
               System.out.println("a rectangle");
          }
     }

     public Shape getTriangle()//方法getTriangle返回一个Shape
     {
          class Triangle extends Shape//三角形继承Shape
          {
               void drow()
              {
                    System.out.println("a triangle");
             }
           }
           return new Triangle();
    }

     public Shape getCircle()//匿名内部类 实际是构造了一个circle继承Shape
    { 
          return new Shape()
          {
               void drow()
               {
                    System.out.println("a circle");
                }
          }; 
     }
}//class Ashape end~

public class TestInnerclassExtends//该类用于测试Ashape
{
    public static void main(String args[])
    {
        Ashape a=new Ashape();
  
       Ashape.Rectangle rec=a.new Rectangle();//构建一个内部类实例的语法
        rec.drow();
  
        a.getTriangle().drow();
  
         a.getCircle().drow();
     }
}

 

输出结果:
a rectangle
a triangle
a circle

分享到:
评论

相关推荐

    Java中inner_class内部类

    1. 对于成员内部类和静态嵌套类,可以通过`new OuterClass().new InnerClass()`或`OuterClass.InnerClass inner = new OuterClass().new InnerClass();`来实例化。 2. 局部内部类和匿名内部类只能在定义它们的方法...

    java-内部类(InnerClass)详解.pdf

    可以通过"OuterClass.InnerClass"的方式引用静态成员类,如`new Outer.Inner1()`。 6. **使用场景** - 当需要创建一个与外部类紧密相关的辅助类,并且希望这个类在没有外部类实例的情况下也能存在时,可以使用...

    第11章 内部类(Inner class).ppt

    内部类(Inner Class)是Java语言中一个独特的特性,它允许在一个类的内部定义另一个类。这种设计模式在处理特定问题时提供了更大的灵活性,比如实现事件监听器、封装复杂逻辑或者创建私有的辅助类。本章我们将深入...

    Java内部类(innerclass).docx

    OuterClass.InnerClass innerObj = outerObj.new InnerClass(); ``` #### 三、访问权限 内部类和静态嵌套类都可以声明不同的访问权限,包括`public`、`protected`、`package-private`(默认访问权限)、`private...

    Anonymous inner class1---马克-to-win java视频

    匿名内部类 inner class 马克-to-win java视频的详细介绍

    Anonymous inner class3---马克-to-win java视频

    匿名内部类 inner class 马克-to-win java视频的详细介绍

    java易混淆概念Anonymous Inner Class

    Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类?匿名内部类是没有名字的内部类。不能 extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 final 修饰符(关键字)...

    java_innerclass_instance.rar_innerclass

    在“java_innerclass_instance.rar_innerclass”这个压缩包中,包含的资源可能是一个关于Java内部类实例应用的示例代码。 内部类主要有四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。这里我们主要...

    Java面向对象(高级)- 类的成员之五:内部类(InnerClass)

    Java面向对象(高级)-- 类的成员之五:内部类(InnerClass)

    Class详解内部类等

    内部类分为四种类型:成员内部类、静态嵌套类、方法内部类和匿名内部类。 1. 成员内部类: 成员内部类就像外部类的成员变量一样,可以访问外部类的所有成员。但是,成员内部类不能包含静态成员,因为它们依赖于...

    java-嵌套类(inner class)-来自oracle官网

    嵌套类主要分为两大类:静态嵌套类(Static Nested Class)和非静态嵌套类(Non-static Nested Class),后者通常被称为内部类(Inner Class)。 - **静态嵌套类**:此类嵌套类被声明为`static`,因此它们与外部类...

    Anonymous inner class2---马克-to-win java视频

    匿名内部类 inner class 马克-to-win java视频的详细介绍

    深入浅析Java中Static Class及静态内部类和非静态内部类的不同

    OuterClass.InnerClass inner = outer.new InnerClass();` 4. **作用场景**: - 静态内部类常用于封装与外部类相关联的工具类或辅助类,这些类不依赖于外部类的实例状态,而是与外部类的类级别信息有关。 - 非...

    局部内部类Local inner class---马克-to-win java视频

    局部内部类 Local inner 马克-to-win java视频的详细介绍

    java内部类详解

    创建静态内部类的实例时,无需先创建外部类的实例,而是通过外部类名直接创建,如 `OuterClass.InnerClass inner = new OuterClass.InnerClass();`。 2. 成员内部类(Member Inner Class) 成员内部类不带 `static...

    内部类的分类及各自用法

    根据不同的应用场景和特性,内部类可以分为多种类型:成员内部类、局部内部类、静态内部类、匿名内部类。下面将详细介绍每种类型的内部类及其特点和使用方法。 #### 成员内部类 成员内部类(也称为非静态内部类)...

    java 内部类 局部内部类 匿名类 实例代码

    Java内部类是Java语言特性中一个独特而强大的部分,它允许在一个类的内部定义另一个类。内部类可以访问外部类的所有成员,包括私有成员,这使得内部类在实现某些特定设计模式时非常有用。本篇文章将深入探讨Java中的...

    11.内部类.doc

    在示例3中,`LocalInnerClassTest`类的`main()`方法内定义了一个局部内部类`InnerClass`,并使用`final`变量`a`,然后在方法内部创建并调用了`InnerClass`的方法。 4. 匿名内部类(Anonymous Inner Class) 匿名...

    内部类的相关知识-静态内部类,匿名内部类……

    ### 内部类的相关知识-静态内部类,匿名内部类…… #### 一、内部类概述 内部类(Inner Class)是 Java 中一种特殊类的定义方式,它允许在一个类的内部定义另一个类。这种设计模式提供了更为灵活的编程机制,可以...

Global site tag (gtag.js) - Google Analytics