`
blues1021
  • 浏览: 134212 次
  • 性别: 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);
}
});

分享到:
评论

相关推荐

    【05-面向对象(下)】

    •我们把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,有的也叫嵌套类,包含内  部类的类也被称为外部类有的也叫宿住类。 •内部类提供了更好的封装,内部类成员可以直接访问外部类的...

    浅析php面向对象public private protected 访问修饰符

    private(私有的 ) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。 图解demo复制代码 代码如下:class Woman{ public $name = “gaojin”; protected

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    7.7.2 类外部的成员函数定义 7.8 类对象的数组 7.9 类的静态成员 7.9.1 类的静态数据成员 7.9.2 类的静态函数成员 7.10 类对象的指针和引用 7.10.1 类对象的指针 7.10.2 类对象的引用 7.11 C++/CLI编程 7.11.1 定义...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    7.7.2 类外部的成员函数定义 7.8 类对象的数组 7.9 类的静态成员 7.9.1 类的静态数据成员 7.9.2 类的静态函数成员 7.10 类对象的指针和引用 7.10.1 类对象的指针 7.10.2 类对象的引用 7.11 C++/CLI编程 7.11.1 定义...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    7.7.2 类外部的成员函数定义 7.8 类对象的数组 7.9 类的静态成员 7.9.1 类的静态数据成员 7.9.2 类的静态函数成员 7.10 类对象的指针和引用 7.10.1 类对象的指针 7.10.2 类对象的引用 7.11 C++/CLI编程 7.11.1 定义...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    7.7.2 类外部的成员函数定义 7.8 类对象的数组 7.9 类的静态成员 7.9.1 类的静态数据成员 7.9.2 类的静态函数成员 7.10 类对象的指针和引用 7.10.1 类对象的指针 7.10.2 类对象的引用 7.11 C++/CLI编程 7.11.1 定义...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    7.7.2 类外部的成员函数定义 7.8 类对象的数组 7.9 类的静态成员 7.9.1 类的静态数据成员 7.9.2 类的静态函数成员 7.10 类对象的指针和引用 7.10.1 类对象的指针 7.10.2 类对象的引用 7.11 C++/CLI编程 7.11.1 定义...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    7.7.2 类外部的成员函数定义 7.8 类对象的数组 7.9 类的静态成员 7.9.1 类的静态数据成员 7.9.2 类的静态函数成员 7.10 类对象的指针和引用 7.10.1 类对象的指针 7.10.2 类对象的引用 7.11 C++/CLI编程 7.11.1 定义...

    java 面试题 总结

    接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象...

    javaSE代码实例

    15.1.4 内部类与外部类之间的成员互访 324 15.1.5 内部类与外部类的预定义对象引用this 327 15.2 局部内部类 328 15.2.1 局部内部类的定义及创建 328 15.2.2 局部变量与局部内部类 329 15.2.3 静态方法中...

    浅谈C# 字段和属性

    作用:设定访问权限,限制类中的成员(属性、方法等)可访问的范围,访问范围通常有,类的内部、类的外部。 最常用的类型:private(私有的,仅类的内部使用);public(公有的,没有访问限制) 注意:类的成员在定义...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    11.2.5 总结:类的修饰符 297 11.3 方法的修饰符 297 11.3.1 方法的访问控制符 298 11.3.2 public:没有限制的修饰符 299 11.3.3 protected:仅对子类和同包的类可见 300 11.3.4 默认控制符:仅在本包中可见 ...

    新手学习C++入门资料

    七、变量作用域 C++语言中,允许变量定义语句在程序中的任何地方,只要在是使用它之前就可以;而C语言中,必须要在函数开头部分。而且C++允许重复定义变量,C语言也是做不到这一点的。看下面的程序: #include ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    9.3.3 继承类成员的访问级别 455 9.4 派生类中的复制构造函数 456 9.5 友元类成员 461 9.5.1 友元类 462 9.5.2 对类友元关系的限制 462 9.6 虚函数 462 9.6.1 虚函数的概念 465 9.6.2 使用指向类...

    [Visual.C++.2010入门经典(第5版)].Ivor.Horton.part1

    7.7.2 类外部的成员函数定义 328 7.8 类对象的数组 329 7.9 类的静态成员 331 7.9.1 类的静态数据成员 331 7.9.2 类的静态函数成员 334 7.10 类对象的指针和引用 334 7.10.1 类对象的指针 334 7.10.2 类对象的引用 ...

    Java开发技术大全 电子版

    4.13.2内部类访问外部类的成员182 4.13.3内部类之间的相互使用185 4.13.4在外部使用内部类186 4.13.5匿名内部类187 4.13.6内部类的作用188 4.14包189 4.14.1包的创建189 4.14.2包的使用191 4.14.3JAR文件的...

    高性能Javascript笔记 数据的存储与访问性能优化

    局部变量也就可以理解为在函数内部定义的变量,很明显访问局部变量要比域外的变量要快,因为它位于作用域链的第一个变量对象中(关于作用域链的介绍可以阅读这篇文章)。变量在作用域链的位置越深,访问所需要的时间就...

    CISCO交换机配置AAA、802.1X以及VACL

    就本例而言,SNMP访问权应该授予网络管理组的成员,不然需收回权限,从而防止网络管理员之外的人无意或恶意对网络设备乱加配置。 CISCO交换机配置AAA、802.1X以及VACL 一 启用AAA、禁用Telnet 以及启用 ssh 1....

Global site tag (gtag.js) - Google Analytics