四11、面向对象的特征有哪些方面 java
四大特征你们都知道:抽象、继承、封装、多态。这是个理解性表述题,每一个人的表述方式可能都不同。下面仅选择一种做为参考: 程序员
1.抽象: 数据结构
抽象——就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来通常叫作类或者接口) 抽象并不打算了解所有问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是数据抽象,二是过程抽象。 函数
数据抽象——就是用代码的形式表示现时世界中一类事物的特性,就是针对对象的属性。好比创建一个鸟这样的类,鸟都有如下属性:一对翅膀、两只脚、羽毛等。抽象出来的类都是鸟的属性,或者成员变量。 spa
过程抽象——就是用代码形式表示现实世界中事物的一系列行为,就是针对对象的行为特征。好比鸟会飞、会叫等。抽象出来的类通常都是鸟的方法。 操作系统
2.继承: htm
继承是一种联结类的层次模型,而且容许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类能够从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类能够从它的基类那里继承方法和实例变量,而且类能够修改或增长新的方法使之更适合特殊的须要。所以能够说,继承是为了重用父类代码,同时为实现多态性做准备。 对象
3.封装: 继承
封装是把过程和数据包围起来,对数据的访问只能经过已定义的界面。面向对象计算始于这个基本概念,即现实世界能够被描绘成一系列彻底自治、封装的对象,这些对象经过一个受保护的接口访问其余对象。封装隐藏了类的内部实现机制,从而能够在不影响使用者的前提下保护类的内部结构,同时保护了数据。 接口
4. 多态性(相同的行为,不一样的实现方式):
多态性是指容许不一样类的对象对同一消息做出响应。多态性包括参数化多态性和包含多态性。多态性语言具备灵活、抽象、行为共享、代码共享的优点,很好的解决了应用程序函数同名问题。总的来讲,方法的重写、重载与动态连接构成多态性。Java引入多态的概念缘由之一就是弥补类的单继承带来的功能不足。(为规避C++中多继承形成的复杂继承问题,java采用单继承。)
动态连接——对于父类中定义的方法,若是子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。
四12、&和&&的区别?
相同点:它们均可以做为逻辑与的运算符,当表达式两边的结果都为true时结果才为true,只要一方为false,结果就为false。
不一样点:
①&&具备短路功能,即第一个表达式为false时,就再也不计算第二个表达式了,因此更高效一些。
②&还能够做为位运算符,当表达式两边不是boolean类型时,&表示按位与操做。
四十3、heap 和stack有什么区别?
堆栈经常连起来讲,其实它们的区别挺多的,下面列举一些主要的:
1.stack是栈,heap是堆。
2.stack的空间由操做系统自动分配和释放,地址是由高向低减小的;heap的空间是手动申请和释放的,地址是由低向高增加的,heap经常使用new关键字来分配。
3.stack空间有限,heap的空间是很大的自由区。
4.栈是一种线形集合,是一块连续的内存区域,其添加和删除元素的操做应在同一段完成。栈按照后进先出的方式进行处理。堆是向高地址扩展的数据结构,是不连续的内存区域,堆采用链表方式来存储空闲内存地址。因此堆得到的空间比较灵活。
5.效率比较:栈由系统自动分配,速度快,但程序员没法控制,灵活性差。
堆通常由new分配内存,速度比较慢,并且容易产生碎片,不过使用方便。
6.在Java中,若只是声明一个对象,则先在栈内存中为其分配地址空间,若再new一下,实例化它,则在堆内存中为其分配地址。
四十4、Static Nested Class 和Inner Class 的不一样?
(1)Nested Class(嵌套类) 通常是C++的说法,Inner Class(内部类) 通常是JAVA的说法。Java内部类与C++嵌套类最大的不一样就在因而否有指向外部的引用上。
(2)通常状况下,Nested Class可分为Static Nested Class和Inner Class。
区别是:
Static Nested Class对象的建立不依赖于外部类的对象。静态内部类只能访问外部类的静态成员。
而Inner Class则不一样,它的对象的建立依赖于外部类的对象。其既能够访问外部类的静态成员也能够访问非静态成员。
使用内部类优势:
⒈ 内部类对象能够访问建立它的对象的实现,包括私有数据;
⒊ 使用内部类能够很方便的编写事件驱动程序;
⒋ 匿名内部类能够方便的定义运行时回调;