开发工具与关键技术:eclipse与java语言
作者:陈鑫鹏
撰写时间:2021年5月26日

instanceof关键字:

在Java中可以使用instanceof关键字来判断一个对象是否为一个类或接口、抽象类、父类的实例

语法格式如下:

java native 返回类型 java返回对象类型_外部类

其中,obj是一个对象,class表示一个类或者接口,当obj是class类(或接口)的实例或者子类实例时,结果result返回true,否者返回false

Java对象类型转换:

所谓对象类型转换,是指存在继承关系的对象,不是任意类型的对象,分别是向上转型和向下转型

1、向上转型:父类引用指向子类对象为向上转型

语法格式如下:


java native 返回类型 java返回对象类型_外部类_02

这个fatherClass是父类的名称或者接口的名称,obj是创建的对象,sonClass是子类的名称

向上转型就是把子类对象直接赋值给父类引用,不用强制转换

使用向上转型可以调用父类类型中的所有成员,不能调用子类类型中特有的成员,最终运行效果要看子类的具体实现

2、向下转型:它与向上转型相反,子类对象指向父类引用为向下转型

语法格式如下:


java native 返回类型 java返回对象类型_内部类_03

其中fatherClass是父类名称,obj是创建的对象,sonClass是子类的名称

向下转型是可以调用子类类型中所有的成员的,只不过要注意的是:如果父类引用对象指向的是子类对象,

那么在向下转型的过程中是安全的,也就是编译是不会出错的

但是:如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译时不会出错,但是运行时会出现Java强制类型转换异常,一般都是使用instanceof运算符来避免出此类错误

Java内部类:

假如在一个类A中定义一个类B,那么类B就是一个内部类,也可以称作嵌套类,相对而言,类A就是外部类

如果有多层嵌套,比如类A中有内部类B,而类B中还有内部类C,那么最外层的类就称为顶层类或者顶级类

内部类也可以分为多种形式,和变量非常类似

分别为:成员内部类和局部内部类。而成员内部类又可以分为实例内部类和静态内部类

![在这里插入图片描述](

java native 返回类型 java返回对象类型_java native 返回类型_04


dlaXhpbl80Nzc5OTA4OQ==,size_16,color_FFFFFF,t_70)内部类有以下几个特点:

内部类它仍然是一个独立的类,内部类在编译之后会被编译成一个独立的.class文件,但是它的文件命名和其它的类不一样,它的名字前面会有外部类的类名和一个$符号

内部类不能用普通的方式访问,内部类是外部类的一个成员,所以内部类可以自由地访问外部类的成员变量,无论是否为private的

如果内部类声明成静态的,就不能随便访问外部类的成员变量,只能访问外部类的静态成员变量

Java实例内部类:

实例内部类是指没有用static修饰的内部类,也称为非静态内部类

在外部类的静态方法和外部类以外的其它类中,必须通过外部类的实例创建内部类的实例

在实例内部类中,可以访问外部类的所有成员

在外部类中不能直接访问内部类的成员,必须通过内部类的实例去访问

在外部类实例和内部类实例是一对多的关系,也就是说一个内部类实例只对应一个外部类实例,而一个外部类实例则可以对应多个内部类实例

在实例内部类中不能定义static成员,除非同时使用final和static修饰

Java静态内部类:

在创建静态内部类的实例时,不需要创建外部类的实例

在静态内部类中可以定义静态成员和实例成员。外部类以外的其它类需要通过完整的类名访问静态内部类中的静态成员,如果需要访问静态内部类中的实例成员,则需要通过静态内部类的实例

静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,就需要通过外部类的实例去访问

外部类可以通过静态内部类的类名直接访问静态内部类的静态成员,如果要访问静态内部类的实例成员,则需要通过静态内部类的实例去访问

Java局部内部类:

局部内部类是指在一个方法(或者代码块)中定义的内部类

局部内部类和局部变量一样,不能使用访问控制修饰符和static修饰符修饰

局部内部类只在当前方法中有效

局部内部类中还不能定义static成员

局部内部类中还可以包含内部类,但这些内部类同样不能使用访问控制修饰符和static修饰符

在局部内部类中可以访问外部类的所有成员

在局部内部类中只可以访问当前方法中final类型的参数和变量

另外还有一个内部类叫匿名内部类:

匿名内部类是指没有类名得到内部类,必须在创建时使用new语句来声明类

java native 返回类型 java返回对象类型_外部类_05

匿名内部类有两种实现方式:
继承一个类,重写其方法
实现一个接口(也可以是多个),实现其方法
匿名内部类有几个特点:
匿名内部类和局部内部类一样,也可以访问外部类的所有成员
匿名类中允许使用非静态代码块进行成员初始化操作
匿名类的非静态代码块会在父类的构造方法之后被执行