内部类

可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如:

 class Outer{

class Inner{
….
}
}
class Outer1{} // 这个Inner1不是Outer1的内部类,不在Outer1的类体括号内
class Innter1{
……
}
Class Outer2{ //Inner2虽然是在Outer2的方法内,但还是在Outer2的类体括号内,是内部类
……
public void test(){
class Inner2{
….
}
}
}

内部类有什么问题和好处:

  • 问题:外部类不使用或不创建外部类对象,就不能直接创建内部类对象
  • 好处:外部类的私有属性,内部类可使用,而且不破坏封装,这也是为什么内部类存在的重要原因

内部类的特性

  • 内部类的特征与变量概念特性很相似
  • 内部类的位置与变量位置相似
  • 变量可分为实例变量(成员变量),局部变量,静态变量
  • 内部类与变量相似,也可分为四种

内部类的分类
静态内部类,成员内部类,局部内部类,匿名内部类

成员内部类

1.使用成员内部类就象使用成员变量一样,在本类的主方法中则直接使用成员内部类,不用加上外部类的名字来访问。但在其他类的主方法中要使用成员内部类则就需要使用外部类.内部类来访问。
2.使用外部类名来访问内部类还因为一个内部类可能有不同的外部类
3.创建一个成员内部类对象必须先创建外部类的对象,因为成员内部类要访问外部类的成员
4.成员内部类可以访问外部类的所有属性
5.成员内部类中不能定义有静态属性
6.当外部类的成员与内部类成员,内部类中局部变量同名时,则使用三种不同方式访问

  • 直接使用变量名则访问局部变量
  • 使用this.变量名则访问内部类的成员
  • 使用外部类名.this.变量名则访问外部类的成员

静态内部类

  • 在成员位置上定义为static的内部类,称为静态内部类
  • 静态内部类类似于静态变量,修饰静态变量的修饰符也可以修饰静态内部类
  • 静态内部类与静态方法,静态属性相似,访问静态方法,静态属性用类名.属性名/方法名访问,但是在本类中可不用类名.来访问。静态内部类也一样,在本类方法中访问则不用加上外部类名来访问,若在其他类的方法中则要加外部类名.内部类名来访问。
  • 静态内部类中只能访问外部类的静态成员和本内部类的成员
  • 静态内部类中不能访问外部类的非静态成员

匿名内部类

1.匿名内部类是一种特殊的局部内部类,局部内部类可以转化为匿名内部类
2.局部内部类要转化为匿名内部类必须具备3个条件

  • 首先是一个局部内部类,也是一个私有的内部类
  • 该局部内部类实现一个接口或继承一个父类
  • 局部内部类只new一次创建一个对象

3.匿名内部类就是无显式地声明某个类名来实现接口,而直接实现接口的方法的类

4.匿名内部类不能定义构造方法,因为匿名内部类是一个特殊局部内部类,它没有类名。

5.匿名内部类可以访问外部类的局部变量,但也要求外部类的局部变量是final型的才能访问

6.匿名内部类可以访问外部类的属性

7.匿名内部类可以在一个类的方法中创建,同样可以在一个类的主方法中实现。

8.当继承的父类中抽象方法与实现的接口中方法同名,同参数列表,同返回类型,则子类只写一个方法实现就可以了

9.当继承的父类中抽象方法与实现的接口中的方法同名,但返回类型不同,则子类就必须写出每个方法,但这样的方法集同名,返回类型不一样则认为是同一方法,又不能构成重载,则就会编译出错

java面对对象(六)--内部类、匿名内部类的更多相关文章

  1. java 面对对象(抽象 继承 接口 多态)

    什么是继承? 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 多个类可以称为子类,单独这个类称为父类.超类或者基类. 子类可以直接 ...

  2. Java学习笔记:内部类/匿名内部类的全面介绍

    编写java程序时,一般一个类(或者接口)都是放在一个独立的java文件中,并且类名同文件名(如果类是public的,类名必须与文件名一致:非public得,无强制要求).如果想把多个java类放在一 ...

  3. Java笔记(十六)……内部类

    内部类概述 内部类是将一个类定义在另一个类里面,对里面那个类就成为内部类(内部类,嵌套类). 当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容 访问特点 内部类 ...

  4. Java 匿名对象、内部类

    一.匿名对象 1.概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.o ...

  5. java面对对象 关键字this super

    this:this是指向对象本身的一个指针,成员函数内部指向当前类的对象 其实this主要要三种用法: 1.表示对当前对象的引用! 2.表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是 ...

  6. java 匿名对象,内部类,修饰符,代码块

    匿名对象是在建对象时只有创建对象的语句方法而没有把对象的地址赋值给变量,匿名对象只能调用一次方法,想再调用时需要再创建一个新的匿名对象 创建普通对象:Person p =new Person(); 创 ...

  7. java面对对象入门(4)-程序块初始化

    Java实例初始化程序是在执行构造函数代码之前执行的代码块.每当我们创建一个新对象时,这些初始化程序就会运行. 1.实例初始化语法 用花括号创建实例初始化程序块.对象初始化语句写在括号内. publi ...

  8. java 匿名对象与内部类

    一 匿名对象 1.匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 例如: public class Person{ public void eat(){ ...

  9. JAVA面对对象(四)——抽象类

    抽象类的作用类似“模板”,可以根据它的格式来修改.创建新的类:但是不能直接由抽象类创建对象只能通过抽象类派生出新的类,再由它来创建对象:抽象类的使用同样是单继承,即一个子类只能继承一个抽象类 抽象类的 ...

随机推荐

  1. Linux 下安装 Tomcat 出现拒绝访问的情况

    此外也无法调用 java -version 查看版本号 ./shutdown 时:提示找不到 JDK 的某个文件夹 ./startup 时:却启动正常 访问 8080 端口时,显示拒绝访问 解决方法: ...

  2. SQL 加载

    首先新建表 第一张表 order_info 第二张表 user_info 登录mysql mysql -u root -p 在开始加载数据之前配置编码 查看默认编码 show variables li ...

  3. 注册OCX失败/ 找不到指定的模块

    错误信息:模块“*.OCX”加载失败,请确定二进制保存在指定的路径中,或者调试它以检查该二进制或相关的.dll文件是否有问题 对于电脑新手,关于OCX或DLL缺失是一件令人十分头疼的事,如果不幸遇到此 ...

  4. Python高级网络编程系列之第二篇

    在上一篇中,我们深入探讨了TCP/IP协议的11种状态,理解这些状态对我们编写服务器的时候有很大的帮助,但一般写服务器都是使用C/Java语言,因为这些语言对高并发的支持特别好.我们写的这些简单的服务 ...

  5. mysql 日期操作 增减天数、时间转换、时间戳(转)

    转自http://www.cnblogs.com/wenzichiqingwa/archive/2013/03/05/2944485.html http://hi.baidu.com/juntao_l ...

  6. 崩 oj 1768 最大子矩阵

    描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵.比如,如下4 * 4的矩阵0 -2 -7  0 9  2 -6  2 -4  1 - ...

  7. FreeRTOS队列

    简单来讲队列是任务间通信的方式,队列本身是可以存储消息的,队列的消息可以由一个或者多个任务写入,也可以由一个或者多个任务读出,总之消息队列是任务间通信方式:

  8. Linux内核访问用户空间文件:get_fs()/set_fs()的使用

    测试环境:Ubuntu 14.04+Kernel 4.4.0-31 关键词:KERNEL_DS.USER_DS.get_fs().set_fs().addr_limit.access_ok. 参考代码 ...

  9. Python基础语法复习

    1.数据类型 List 列表 函数 append(): 在列表末尾追加. count(): 计算对象在列表中出现的次数. extend():将列表内容添加到列表中. index(): 计算对象在列表中 ...

  10. angularjs的$window功能小练习

    我们想在一个文本框输入一些文字,然后点击铵钮,alert()出来. <div ng-app="alertApp" ng-controller="alertContr ...