`
blues1021
  • 浏览: 139619 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

各内部类的作用、定义、成员限制、访问总结

阅读更多

内部类的作用总括:
1.内部类可以独立的继承一个类和多个接口,提供了多继承的支持(若用接口为不同形式的继承);当然对于匿名内部类没有这样的能力,但是它在重载父类方法方面特别突出。
2.为外部类提供了一个可隐藏的强大的数据结构体。

 

记忆:1.在内部成员和静态成员相同和区别:

    (1)各修饰都一样,包括控制限定和非控制限定。

   (2)在外部类的方法中声明对象调用都是一样的。

  区别:在外部类外成员内部类声明对象为: Outter.innner obj=new Outter.new inner();//因为为对象拥有

         在外部类外静态成员的类声明对象为:Outter.inner obj=Outter.new innner();//不为对象拥有。

  2.局部内部类中,本身方法里面的局部变量不可以访问,因为Inner对象的生命周期和外部类的周期一样,而方法内的变量的周期是暂时的,而声明为static即可使用。

3.匿名内部类和局部内部类一样都没有访问控制限制符,且比局部没有任何的非访问控制限定符。

在声明对象是重载方法,然后用当前对象.重载方法即可。

一、成员内部类

 

1.作用:相当于类的成员,作为外部类对象的一部分,为对象提供强大的功能支持。

  2.定义: 访问控制修饰:private protected public

                非访问控制修饰:final abstract。

     示例:

public class memberClass{
      int j,k;
    //  static int s=100;不能在成员内部类中定义static成员。所以没有对内部类静态成员访问问题。

...

}

3.成员的定义:全部类型的成员,可以有全部的控制修饰符,非控制修饰符就是static不能用。

4.访问:首先声明,

    类内部非静态和静态itself和之间相互访问的规则:只有静态方法访问非静态成员时要声明对象调用,其它itself和非静态调用静态都可以之间访问。

    类外部的访问规则:在可访问的条件下,调用类的非静态成员时要声明对象,调用类的静态成员是用类限定符。

 (1)外部类内部访问内部类成员,直接声明对象调用即可。

(2)外部类外访问内部类成员,1、可以封装到一个外部类的方法中然后调用.

                                                    2.直接调用:

                        法一:testMemberClass mb=new testMemberClass()
                                  testMemberClass.memberClass mb2=mb.new memberClass();

                        法二:testMemberClass.memberClass mb2=new testMemberClass().new memberClass();

 得到对象后直接调用内部类的成员。其实法一、二都是一样的,先声明外部类的对象.声明内部类对象。

  二、静态内部类

1.作用:并不相当于外部类的静态成员,只是声明为独立于外部类对象的普通类,作用不大。

2.定义:访问控制符:控制访问:private protected public

                                    非控制访问:abstract static final

                          也就是所有的类访问控制符都可以,当然static一定要有。

       示例:

  public static class StaticInner{// 可以在里面声明static 成员,无论在哪里调用都用对象.f()调用,
        public static int  f(){// 有些特别,出现了静态成员也不是静态成员了(本人测试过)。

...}

}

3.成员的定义:全部类型的成员,可以有全部的控制修饰符,非控制修饰符包括static都能用。

4.访问:

(1)外部类内部访问内部类成员,直接声明对象调用,和成员内部类一样(因为它不是静态的)。

(2)外部类外访问内部类成员,1、可以封装到一个外部类的方法中然后调用.(非静态的)

                                示例: TestStaticClass ts=new TestStaticClass();
                                             ts.outf();

                                                   2.直接调用:                                 (静态的)

                              示例:TestStaticClass.StaticInner inner=new TestStaticClass.StaticInner();
                                         inner.f();

在与成员内部类比较看出,构造方法部分少了一个new,其余都一样;这里要说明的是new是用来限制内部类的,所以用外部类名.静态的内部类对象。此时解释内部类又为静态的了,所以说静态内部类并不相当于静态的。

三、局部内部类

1.作用:相当于方法内的成员变量,可以为方法提供强大的数据结构且隐藏类,不是很常用。

2.定义:修饰符:没有控制修饰符,因为不是类的成员;非控制访问修饰符:final、 abstract.

 示例:public void getInner{

int x=100;

class methodClass{

//x=x+1;不能访问方法变量。

 }

}

3. 成员的定义:全部类型的成员,可以有全部的控制修饰符,非控制修饰符就是static不能用(和成员内部类一样)。可以访问外部类的成员,可以访问方法的 常量变量(不过方法的变量要声明为final,因为对象的生存期在运行方法后还存在,所以一般变量调用会引用不到,而final可以引用到)。

4.访问:

特别地:只能在方法中访问,因为其作用域为方法内部,所以只能在作用域内访问到。

 示例:

public void getInner(){

class Inner{

public void show(){}

}

Inner i=new Inner();

i.showl();

}

外部只能用 调用封装了它的外部类的方法中调用.

如:object1.getInner();

四、 匿名内部类:

1.作用:简化了声明一个类,直接覆盖父类的方法,然后调用。在事件处理中常使用。

2.定义:没有修饰符,包括控制访问和非控制访问的都没有。没有类名称,声明父类对象时创建自己的对象,且重载父类的方法。

示例:public class Outter{pblic void show(){};};

 class Test{

public static void main(String [] args){

Outter out=new Outter(){

public void show(){//重载show方法

}};

out.show();//和局部内部类一样,在方法中调用,但是在它的方法中创建对象只能创建父类对象时。

}

}

3.方法的修饰符,直接重载父类的方法,所以修饰符也一样。

4.访问:(1)在方法中访问,如上。

 (2)f.addMouseMotionListener(new MouseMotionAdapter() {// 匿名类开始
public void mouseDragged(MouseEvent e) {
String s = "Mouse dragging:X=" + e.getX() + ",Y="
+ e.getY();
tf.setText(s);
}
});

分享到:
评论

相关推荐

    Java内部类总结,内部类的共同特征,内部类的分类等

    1. 成员内部类:即在一个类中直接定义的内部类,成员内部类与普通的成员没什么区别,可以与普通成员一样进行修饰和限制。成员内部类不能含有 static 的变量和方法。 2. 局部内部类:即在一个方法中定义的内部类,...

    Java内部类总结

    内部类,顾名思义,是在另一个类的内部定义的类。这种独特的结构让内部类能够访问包含它的外部类的私有成员,包括变量和方法。这为编程提供了一种封装更紧密、功能更灵活的设计模式。内部类可以被声明为静态、受保护...

    Java内部类总结[参考].pdf

    Java内部类总结 Java内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附...但是,内部类也存在一些限制和注意事项,例如成员内部类不能定义静态成员,局部内部类不能有访问说明符等等。

    java 利用反射获取内部类静态成员变量的值操作.docx

    1. **内部类**:内部类是一种特殊的类,定义在另一个类(外部类)的内部。它可以访问外部类的所有成员(包括私有成员),同时也可以被外部类所访问。 2. **静态成员变量**:静态成员变量是类级别的变量,可以通过...

    JAVA语法总结 - 内部类

    方法内部类是在方法内部定义的类,它只能在该方法内部访问。 ##### 方法内部类的特点 1. **实例化**:只能在定义它的方法内部实例化。 2. **访问限制**:不能访问该方法内的非final局部变量,因为局部变量是临时的...

    Java内部类访问规则.doc

    静态内部类只能够访问外部类的静态成员,因此存在访问限制。 - **访问格式**: - 访问静态内部类的非静态成员: ```java Outer.Inner oi = new Outer.Inner().function(); ``` - 访问静态内部类的静态成员: `...

    java 内部类使用(内部匿名类)

    Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏实现细节,同时也增强了代码的复用性。内部类分为几种类型,包括成员内部类、...

    Java内部类的作用

    通常情况下,非内部类不能声明为`private`或`protected`,这限制了类之间的访问控制。然而,内部类则可以声明为`private`,从而实现对内部类的完全隐藏,增强了类的设计安全性。 **示例:** ```java public class ...

    Java内部类(DOC)

    ### Java内部类(DOC)详解 #### 一、概述 Java内部类是Java语言中一个...综上所述,Java内部类提供了灵活的对象组织方式和代码封装机制,特别是静态成员类和成员类各有特点,在实际开发中可以根据具体需求选择使用。

    java 匿名内部类的使用规范

    - **非静态成员**:匿名内部类拥有对外部类的隐式引用,可以访问外部类的非静态成员,但必须通过`OuterClass.this`来明确指出。 3. **局部变量的final限制** 如果匿名内部类需要访问局部变量,那么这个局部变量...

    java 内部类应用

    Java内部类是Java语言的一个特色特性,它允许我们在一个类的内部定义另一个类。这种设计模式在处理一些特定情况时非常有用,例如实现匿名回调、封装特定逻辑或创建与外部类有紧密关系的类。本篇文章将深入探讨Java...

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

    内部类(Inner Class)是 Java 中一种特殊类的定义方式,它允许在一个类的内部定义另一个类。这种设计模式提供了更为灵活的编程机制,可以更加方便地访问外部类的成员变量和方法。根据内部类的不同特性,可以将其...

    内部类示例源码

    接着,局部内部类是在方法、构造器或者代码块内部定义的类。它们的作用域仅限于定义它们的块,因此它们可以用来封装局部变量。局部内部类不能声明为静态,也不能有静态成员。由于其作用域的限制,它们通常用于实现...

    Java内部类.pdf

    - 成员内部类:定义在外部类的成员位置,可以直接访问外部类的所有成员。 - 局部内部类:定义在方法或者作用域块中,不能有访问权限修饰符,只能访问方法中被final修饰的局部变量。 - 匿名内部类:没有类名的局部...

    静态内部类

    在Java编程语言中,内部类允许在一个类的内部定义另一个类。根据内部类是否声明为static,它们被分为非静态内部类(也称为成员内部类)和静态内部类。 #### 二、静态内部类的特点 静态内部类具有以下特点: 1. **...

    接口,内部类,抽象类概念和区别

    内部类是定义在一个类内部的类,它可以访问外部类的所有成员,包括私有成员。内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。成员内部类就像普通的类成员,可以有自己的访问修饰符;局部内部...

    java 静态内部类的使用规范

    - **作用域**:静态内部类的作用域与普通静态成员相同,可以在整个外部类的范围内被访问。 - **生命周期**:由于不依赖外部类实例,静态内部类的生命周期独立于外部类,可以单独存在。 **2. 访问权限** - 静态内部...

    深入解析Java中的内部类

    内部类是Java语言中一个独特的特性,它允许在一个类的定义内部定义另一个类。内部类提供了更高级别的封装,使得代码更加模块化,并且能够访问外部类的所有成员,包括私有成员。本文将深入探讨Java中的四种内部类:非...

Global site tag (gtag.js) - Google Analytics