什么是面向对象内部类呢?所谓的内部类,即从字面意义上来理解的话,就是把类放到类当中。

那么内部类都有什么特点呢?

1、内部类可以访问包裹他的类的成员。

2、如果包裹他的类想访问被其包裹的类的话就得实例化,才可以访问。

代码示例:

 class Outer
{ int num = ; void show()
{ System.out.println("Outer Show method!!"); } void method()
{ Inner a = new Inner();
a.innerShow(); } static class Inner
{ static final int num = ; void innerShow()
{ System.out.println("The num is "+num);
//show();
staticShow(); } static void staticShow()
{ System.out.println("Static Inner Show"); } } } class Inner
{ void innerShow()
{ System.out.println("The num is "); } } class InnerClassDemo1
{ public static void main(String[] args) { Outer.Inner out = new Outer.Inner();
out.innerShow(); } }

内部类的作用:

  一般用来作为类的设计。

  当我们描述事物的时候,发现其中还有事物,并且这个事物还在访问被描述事物的内容。这个时候就用到了内部类。

内部类还有哪些特点呢?

1、内部类中有静态变量的话,内部类必须是静态的。也就是说内部类可以被修饰符修饰,因为他本身也是类内部的成员。

2、如果想从外部直接调用内部类,必须按照这种方式来调用:

 class InnerClassDemo1
{ public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner();
inner.showInner(); } }

内部类细节注意:

1、this变量,我们知道一个类对象被new之后肯定有一个this与之相关联,那么类当中有内部类的时候,如果单凭一个this的话可能就会造成混淆。我们来写段代码来测试一下:

 class Outer
{ private int num = ; class Inner
{
int num = ;
void showInner()
{ System.out.println("The Outer num is " + this.num);
System.out.println("The Inner num is " + Inner.this.num);
system.out.println("The Oute num is "+Outer.this.num); } } void method()
{ Inner inner = new Inner();
inner.showInner(); } } class InnerClassDemo1
{ public static void main(String[] args) { Outer.Inner inner = new Outer().new Inner();
inner.showInner(); } }

2、为什么内部类能够直接访问外部类的成员呢,因为内部类持有外部类的引用,书写格式就是外部类.this.

内部类的另外一个特点就是,可以放在局部位置上,什么是局部位置呢,形象一点来说的话,就是可以放到函数当中。示例:

 class Outer
{ private int num = ; void method()
{
     int num = 9;//必须用final关键字修饰之后,在Inner但中才可以访问这个值。
class Inner
{
//int x = ;
void show()
{ System.out.println("the num is :"+num); } } Inner inner = new Inner();
inner.show(); } } class InnerClassDemo1
{ public static void main(String[] args) { Outer out = new Outer();
out.method(); } }

内部类在局部位置上只能,访问局部但中由final关键字修饰的局部变量。为什么呢?因为当类在局部的时候,当局部方法进栈之后,变量生成,出栈之后变量消失,如果在方法外调用局部作用域的话,因为方法已经出栈了,那么局部变量已经消失了,释放了。此时若要保证外部能够访问局部位置上的内部类中的调用了局部位置的变量的方法,只能够把局部位置上的局部变量用final修饰成常量,这样才可以供外部访问。java是一门严谨性的语言。

java学习面向对象之内部类的更多相关文章

  1. Java学习---面向对象的远程方法调用[RMI]

    基础知识 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. 常见的分 ...

  2. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  3. java学习面向对象之异常之一

    一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...

  4. Java面向对象之内部类(访问格式)

    一.基础概念 1.内部类是定义在类中的类.A类需要直接访问B类中的成员时,可以将A类定义到B类中,作为B类的内部类存在. 2.内部类可以相当于外部类中的一个成员,可以被成员修饰符所修饰.(如:publ ...

  5. Java面向对象之内部类(匿名内部类)

    一.基础概念 匿名内部类:简化书写的内部类.其实匿名内部类就是一个子类对象. 前提:内部类需要继承或者实现外部的类或者接口. 格式:new 父类或者接口(){定义子类的内容} 二.将内部类定义到局部的 ...

  6. Java学习 面向对象(下)——Java疯狂讲义th4

    面向对象(下) [TOC] 包装类 通过包装类可以把8个基本类型的值包装成对象使用. 自动拆箱.自动装箱 把字符串类型值转换成基本类型的值: 包装类的 parseXxx(String s)静态方法 包 ...

  7. java学习面向对象之匿名内部类

    之前我们提到“匿名”这个字眼的时候,是在学习new对象的时候,创建匿名对象的时候用到的,之所以说是匿名,是因为直接创建对象,而没有把这个对象赋值给某个值,才称之为匿名. 匿名对象回顾: class N ...

  8. Java类成员之内部类

    内部类含义: 在Java中允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类. Inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称. Inner ...

  9. Java核心技术点之内部类

    1. 为什么要使用内部类     内部类就是定义在一个类内部的类,那么为什么要使用内部类呢?主要原因有以下几点:第一,内部类中定义的方法能访问到它所在外部类的私有属性及方法:第二,外部类无法实现对同一 ...

随机推荐

  1. 微信45028错误,微信has no masssend quota hint错误

    微信45028,微信has no masssend quota hint 微信测试账号群发出现45028,has no masssend quota hint错误 >>>>&g ...

  2. 路E施工管理ERP系统

      前  景   目前公路工程由于点多.线长.面广.周期久.投资大等原因,管理很难到位,施工过程中存在着大量问题: 规章制度欠缺或不健全,即便是有好的规章制度,在施工过程中也往往形同虚设,不能与现场施 ...

  3. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

  4. 洛谷 P1731 生日蛋糕

    /*洛谷 1731 生日蛋糕 傻傻的-1 T成了傻逼*/ #include<cstdio> #include<iostream> #include<cmath> # ...

  5. CSS相对定位、绝对定位

    CSS定位属性:position. 定位的基本思想:定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素或浏览器窗口本身的位置. position属性值:static.relativ ...

  6. vue写请求接口--请求参数的变量要在return里面声明

    //谨记return里面是返回所有声明的变量的名字,数组以及对象等等 export default { data () { return { //所有的变量都是写在data 的return里面的,主要 ...

  7. HTTP请求方式中get和post的区别

    表单提交中get和post方式的区别有5点 1.get是从服务器上获取数据,post是向服务器传送数据. 2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一 ...

  8. Android NDK学习总结

    一.android NDK编程步骤 java文件中声明native方法. android工程根目录新建jni文件夹. 调用javah命令为第一步声明的native方法生成相应的.h头文件. 通过win ...

  9. DBA词典:数据库设计常用词汇中英文对照表

    1. Access method(访问方法):此步骤包括从文件中存储和检索记录. 2. Alias(别名):某属性的另一个名字.在SQL中,可以用别名替换表名. 3. Alternate keys(备 ...

  10. C#当中的多线程_线程基础

    前言 最近工作不是很忙,想把买了很久了的<C#多线程编程实战>看完,所以索性把每一章的重点记录一下,方便以后回忆. 第1章 线程基础 1.创建一个线程 using System; usin ...