面向对象
1.面向对象和面向过程
面向对象以功能来划分,面向对象可以有更好的可移植性和拓展性
面向过程以步骤划分问题
2.对象和类的关系:类是对对象特征的抽象与归纳,对象是类的实例化,如汽车和BMW(宝马)
3.栈和堆:
栈的特点:
—线程私有,不能实现线程之间的共享(栈是跟随线程的,有线程就有栈。)
—局部变量存入栈中
—系统自动分配,内存连续,速度快
堆的特点:
—new出来的对象
—空间不连续,分配灵活,速度慢
—方法区的堆被所有线程共享,用来存放永远不变或唯一内容(堆是跟随 JVM 的,有 JVM 就有堆内存。)
4.局部变量、成员变量、静态变量
局部变量:在方法或语句块中声明,必须要手动初始化,从属于方法或语句块
成员变量:在类中方法外声明,从属于对象
静态变量:类中方法外声明(用关键字static),从属于类
5.构造方法用于对类的成员变量的初始化,构造方法名必须跟类名保持一致,没有返回值,构造方法在对象实例化时被调用(构造方法可以重载)
6.this指针在普通方法中指的是当前类,在构造方法中指的是当前类的其他构造方法
7.static变量在内存中放置在堆中的方法区,属于静态不变;静态初始化块相比于main先执行
8.一个构造方法调用另一个构造方法通过this(参数),必须位于第一句
9.package的作用
—提供多层命名空间,解决命名冲突
—对类按功能分类,使项目组织更加清楚
10.import java.util.*;不会影响运行速度,但会影响编译速度。import static 静态导入的作用是导入类的静态属性和方法
11.java.util.Date和java.sql.Date怎么区分
申明引用或者实例化的时候必须全路径
12.javadoc注释/** */
13.内聚和耦合
内聚:一个模块内部各个元素彼此结合的紧密程度的度量
耦合:软件系统结构间相互联系紧密程度的一种度量
14.一般属性需要设置为private =>封装数据,通过调用对象方法修改,不让其他人随意修改
15.继承的好处
逻辑关系更清晰,减少代码重复,在使用时,通过父类定义引用,可以组织所有子类
16.单继承能避免诸如父类命名重复等错误的发生,java可以通过接口组合来实现多继承
17.假如父类有main方法,子类不能继承(main方法是静态方法)
18.Java中多态性的实现
(1)什么是多态
- 面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
- 多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
- 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
- 多态的作用:消除类型之间的耦合关系。
- 现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
(2)多态存在的三个必要条件
— 要有继承;
— 要有重写;
— 父类引用指向子类对象。
(3)多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
19.java中,final修饰的方法属于静态绑定,其他方法是动态绑定
20.final变量是只读的。方法前面加上final关键字,代表这个方法不能被子类的方法重写。使用final修饰的类叫fina类。final类不能被继承
21.String类是final类,不能被继承
22.*向上转型和向下转型
23.抽象类和接口的区别
抽象类:
1.包含抽象方法的类是一定抽象类,抽象类不一定包含抽象方法。抽象类可以有普通方法,可以定义构造方法。(抽象类不能被new出来,抽象类的构造方法不能被调用)
2.抽象方法一定是public abstract
3.抽象类中可以定义一些子类的公共方法,子类只需要增加新的功能,不需要重写已存在的方法。
接口:
1.接口中只能定义常量和抽象方法
2.接口中的常量一定是public static fianl
3.接口不能定义普通变量,普通方法,不能被new
4.接口之间可以多继承,一个类可以实现多个接口
23(2).接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。抽象类中可以有静态的main方法。
24.作用域public,private,protected,以及不写时的区别
区别如下:
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
private √ × × ×
25.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被”屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
26.构造器Constructor是否可被override
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
27.面向对象的特征有哪些方面
主要有以下四方面:
1.抽象:
抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2.继承:
继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
28.java中实现多态的机制是什么?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
29.面向对象设计的基本原则
面向对象设计原则通常归结为五大类,
第一“单一职责原则”(SRP):一个设计元素只做一件事,不要随意耦合,多管闲事;
第二“开放封闭原则”(OCP):对变更关闭、对扩展开放,提倡基于接口设计,新的需要最好不要去变更已经完成的功能,可以灵活通过接口扩展新功能;
第三“里氏替换原则”(LSP):子类可以替换父类并且出现在父类能够出现的任何地方,这个也是提倡面向接口编程思想的;
第四“依赖倒置原则”(DIP):要依赖于抽象,不要依赖于具体,简单的说就是面对抽象编程,不要过于依赖于细节;
第五“接口隔离原则”(ISP):使用多个专门的接口比使用单个接口要好,在设计中不要把各种业务类型的东西放到一个接口中造成臃肿。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15174.html