内部类

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

 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. map的使用注意事项

    map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取 map的长度是不固定的,也就是和slice一样,也是一种引用类型 内置的len函数同样适用于map,返回 ...

  2. SpringMVC: web.xml中声明DispatcherServlet时一定要添加load-on-startup标签

    游历SpringMVC源码后发现,在web.xml中注册的ContextLoaderListener监听器只是初始化了一个根上下文,仅仅完成了组件扫描和与容器初始化相关的一些工作,并没有探测到具体每个 ...

  3. 【转】这五种方法前四种方法只支持IE浏览器,最后一个方法支持当前主流的浏览器(火狐,IE,Chrome,Opera,Safari)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. LabelImg 图像图像标注工具

    https://github.com/tzutalin/labelImg windos版本请不要把存放在中文目录下,否则打不开.

  5. 为什么签名前要加"\x19Ethereum Signed Message:\n"

    在以太坊中,可以找到关于上述破损的解释例子.以太坊有两种消息,交易

  6. oracle hint 使用

    --和优化器相关的hint 1./*+ ALL_ROWS */表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. SELECT /*+ ALL+_ROWS */ EMP_NO,E ...

  7. log4j2的环境变量使用

    官方文档  http://logging.apache.org/log4j/2.x/manual/lookups.html#EnvironmentLookup

  8. BZOJ2125 最短路 圆方树、倍增

    传送门 对仙人掌建立圆方树,然后对边定权 对于圆点和圆点之间的边,是原来仙人掌上的桥,边权保持不变 对于圆点和方点之间的边,将圆方树看做以一个圆点为根的有根树之后,一个方点的父亲一定是一个圆点.对于这 ...

  9. React-state props与render()的关系

    state或者props发生改变,render()j就会执行一次. 父组件的render()被重新执行时,它的子组件的render()都会重新执行.

  10. How to Enable TLS 1.2 on Windows Server 2008 R2 and IIS 7.5

    Nowadays there is an SSL vulnerability called POODLE discovered by Google team in SSLv3 protocol. So ...