学习学习内部类,巩固下基础知识。

1.概念

一个类的定义在另一个类的内部定义。

2.好处(简要回答)

1.一种代码隐藏机制。

2.了解外围类,并与之通讯。

拥有外围类的所有元素的访问权限,但是如何做到的呢?

回答:

外围类创建内部类时,在此内部类的对象中会秘密的捕获一个指向外围类的引用。人无法感知是因为编译器替我们做了这个工作。

换句还说:只有内部类和外部类相关联的时候,内部类才能看到外部类,即内部类必须是非static类型。

3.基本语法应用

3.1   .this和.new的用法

1.内部类生成外部类的引用:(非static内部类)

Outerclass.this

2.:main方法中实例化一个内部类(非static内部类)

Outercalss    o = new outercalss();

Outercalss .inner inner = o.new inner();

3.2  私有的内部类

1.隐藏类的内部实现细节。

2.给java编译器提供生成更高效率代码的机会。

简单解释:客户端没办法访问不属于私有内部类所实现接口的公共方法,所以扩展接口无价值。

3.3  方法和作用域的内部类

为什么可以在方法和作用域中编写内部类:

1)实现某个接口,可以创建并获得(返回)其的引用。

2)解决一个复杂问题,创建一个类来辅助解决问题,但又不想让这个类是公用的。

3.4  匿名内部类

匿名内部类如何创造构造器效果?

通过实例初始化,能够达到匿名内部类创建一个构造器的效果。

匿名内部类和普通类的区别?

匿名内部类比普通类多了些限制。

匿名内部类既可以实现接口也可以对类进行扩展,但是两者不能兼得。如果实现了接口,也只能实现了一个接口。

3.5  嵌套类

嵌套类隔断了内部类和外围类的联系。

嵌套类的2个特点:

1)要创建了嵌套类,就意味着并不需要外围类的对象。

2)不能从嵌套类的对象中访问非静态的外围对象。

3.6  接口中的嵌套类

1.接口中的类,被自动的设置为public和static。不仅不违反接口的规则,甚至可以在内部类中实现外围的接口。

2.接口中的嵌套的有什么用途?

当想创建某些公用的代码时,使该接口的所有的实现类,所公用,那么接口内部的嵌套类会显得很方便。

3.测试可以借助嵌套类吗?

平时我们做项目除了单元测试、自动化测试、集成测试等手段,其实不妨在每个类或者大部分的类中都写上main方法,而这么做的一个坏处就是在代码编译时,会出现一些额外的代码。那么采用嵌套类,编译后就会生成独立的class文件,而测试时只要执行这个独立的class文件即可。

3.7 从多层嵌套类中访问外部类的成员

4.到底为什么需要内部类?

第一个疑问:

为什么不用普通类,要用外围类呢?

回答:如果外围类可以满足需求,那就用外围类即可。

第二个疑问:

那么到底什么时候用内部类呢?

简单的回答:外围类不是总能 享受到接口带来的好处,有事类中需要用到接口的其他实现类,所以总结下引入内部类的原因----每个内部类都可以独立的继承自一个(接口)的实现,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类毫无影响。

第三个问题:

多重继承的问题。

众所周知,java类不可以多继承。但是完事没有绝对。

接口解决了部分的实际问题,而内部类有效的实现了“多继承”,于是对于java多继承的问题,内部类提供了更加完美的方案。也就是说内部类允许继承多个非接口类型,即类或者抽象类。

未完,待续......

时间: 2024-08-27 15:33:35

学习学习内部类,巩固下基础知识。的相关文章

学习 shell脚本之前的基础知识

转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员.目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目.有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富.笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要

加壳学习笔记(一)-基础知识

1.预备知识 1.关于栈,在windows里面的堆栈其实很简单,当学了才知道哈,呵呵,第一要记住的是windows里面的栈是向低地址生长的(extended,延伸,呵呵,顺便丰富下英语的单词量,确实是少的可怜),你可以这样认为,栈就像是一个倒立的箱子,箱子的口子是向下的,底是向上的,这里就表明了系统栈的分布也是延伸方向是由高地址向低地址extended,在最初的空栈阶段,栈顶(extended stack pointer,简称是esp)在栈底的低一个位置,呵呵,其实很好理解,就是说最初的箱子是空

学习大数据要什么基础知识?学到什么程度才能从事大数据行业?

因为大数据前景好,薪资高,很多人想通过参加学习大数据,然后进入大数据行业发展.但是因为大数据的门槛较高,对于学习人员有一定的要求,那么学习大数据需要什么基础知识呢? 首先我们了解下对于大数据学习者本身的学历水平的要求 目前大多数的机构,对于大数据学习者要求必须是大专学历以上,而且大专学历还要求是计算机相关专业的,如果是本科及本科以上的,则对专业要求适当的放宽.同时大数据分为两大方向:大数据开发和大数据分析. 这两大方向的对于基础知识的要求不同,大数据分析偏向于分析,对于编程要求不高,相较而言对于

IOS学习之路--OC的基础知识

运行过程 1.编写OC程序:.m源文件 2.编译.m文件为.o目标文件:cc -c xxxx.m 3.链接.o文件为a.out可执行文件:cc xxxx.o -framework Foundation 4.执行a.out文件:./a.out #import 的功能跟#include一样,只是更好用,他避免了头文件的多次包含 为了能使用OC的特性, 一定要引入#import <Foundation/Foundation.h> 类定义// @implementation 和 @end // 设计(

汇编入门学习笔记 (一)—— 基础知识、寄存器

疯狂的暑假学习之  汇编入门学习笔记 (一) 参考:<汇编语言> 王爽  第一,二章 一.基础知识 1. 用汇编语言编写程序的工作过程 汇编本质就是为了方便程序员,把二进制代码用汇编指令来表示 汇编指令---------------->  编译器  ---------------->机器码----------------> 计算机执行 mov ax, bx                                                          100

《solidity学习笔记》chapter 2-solidity基础知识

映射 映射本质上是存储和查找数据所用的键-值对. mapping (uint => string) intToStr; 地址 以太坊区块链由 account (账户)组成,你可以把它想象成银行账户.一个帐户的余额是 以太 (在以太坊区块链上使用的币种),你可以和其他帐户之间支付和接受以太币,就像你的银行帐户可以电汇资金到其他银行帐户一样.每个帐户都有一个"地址",你可以把它想象成银行账号.这是账户唯一的标识符. mapping (address => uint )publi

Python学习系列(二)(基础知识)

Python基础语法 Python学习系列(一)(基础入门) 对于任何一门语言的学习,学语法是最枯燥无味的,但又不得不学,基础概念较繁琐,本文将不多涉及概念解释,用例子进行相关解析,适当与C语言对比,避免陷入语法的苦海.我认为初学者学习语法的目标是学会使用即可,关于对概念的深入理解,剖析,没有一定的知识积累是很难做到的. 学习Python,基本语法不是特别难,有了C的基本知识,理解比较容易.本文的主要内容是Python基础语法,学完后,能熟练使用就好.(开发环境依然是Python2.7,简单使用

[Python学习] 专题三.字符串的基础知识

        在Python中最重要的数据类型包括字符串.列表.元组和字典等.该篇主要讲述Python的字符串基础知识. 一.字符串基础         字符串指一有序的字符序列集合,用单引号.双引号.三重(单双均可)引号引起来.如: s1='www.csdn.net'   s2="www.csdn.net"   s3='''aaabbb''' 其中字符串又包括: 1.转义字符串 像C语言中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,pyth

Scala学习(1)——Scala基础知识

本文要解决的问题: Spark主要是由Scala语言编写而成的,所以要真正深入了解Spark,必须要熟悉Scala,在此结合阅读<Scala编程>这本书的情况,对Scala语言做一个基本的总结. Scala的优势 (1)简洁 类型推断 函数创建的文法支持 (2)Java互操作性 可重用Java库 可重用Java工具 没有性能惩罚 Scala工作机制 编译成Java字节码 可在任何标准JVM上运行,甚至是一些不规范的JVM上 Scala编译器是Java编译器的作者写的 启动解释器 输入Scala

VBS学习日记(二) 基础知识

VBScript 基础知识 一.变量 1.全部单引號后面的内容都被解释为凝视.(在vbsedit中ctrl+m凝视,反凝视ctrl+shift+m) 2.在 VBScript 中,变量的命名规则遵循标准的命名规则,须要注意的是:在 VBScript 中对变量.方法.函数和对象的引用是不区分大写和小写的.在申明变量时,要显式地申明一个变量,须要使用keyword DIm 来告诉 VBScript 你要创建一个变量,并将变量名称跟在其后.申明多个同类型变量,能够用逗号分隔.注意:VBScript 中