最近也是打算面试,但是本人阐述能力弱,只能背了一遍在背一边。最后记下来。。。
这些总结是东凑西拼的。。。
什么是类、对象:
类是具有相同特性、行为的对象的抽象。在Java中,类其实是一种数据类型。
类具有属性,它表达了对象状态的抽象,在类中用一组数据结构描述类的属性。
类具有操作,它表达了对象状态的抽象,在类中用一组方法描述类的操作,是修改对象的状态的行为。
类的特征和行为是为了映射出具体的对象,类表示的是一个模板。在现实生活中,任何可以被指定的事务都可以被称为对象,对象不仅可以表达出具体的,还能够表达出抽象的规则、计划、事务。因此类的实例就是对象,对象的抽象就是类。
类本身只是一种概括,不具备哲学上的具现性。所以类不占用储存空间,而对象占用内存空间。
面向对象软件开发有什么优点:
面向对象软件开发是对现实生活的理解和抽象的方法,将软件内部模块化、具体化。通过封装、继承、多态实现程序的:
代码开发模块化、高类聚,低耦合、更容易维护和修改。
提高代码的可重用性、可扩展性。
增强代码的灵活性、扩展性。
封装、继承、多态
封装是实现软件内部模块的基础,封装的目的是在于程序的“高类聚,低耦合”,避免程序的相互依赖性带来变动影响。也可以这样说:封装是隐藏了内部实现的一种机制,在不影响高层模块的基础下修改类的结构。通过访问控制修饰符实现权限的限制,对外部而言是将类的内部细节隐藏、只提供方法对内部的操作,获得行为的数据。
总结四点:
-
1. 封装能够减少耦合。
-
2. 类内部的结构可以自由修改。
-
3. 可以对成员变量进行更精确的控制。
-
4. 隐藏信息,实现细节。
首先继承是支持创建分层次等级的类。将一个已经存在的类的属性、方法共享给现有类。现有的类可以扩展新的方法,也可以修改方法,完成一些特殊的需求。继承是子类共享父类的数据、实现父子类的关系,分层次等级的一种机制。提高了代码的可重用性和可扩展性。
继承具有以下五点特性:
-
1. 子类拥有父类非private的属性,方法。
-
2. 子类可以在父类原有基础上进行扩展。
-
3. 子类可以修改父类原有的方法(但是在特殊情况下)
-
4. Java的继承是单继承、多实现(使用extends、interface关键字),但是可以多重继承,例如:A继承B,B继承C。这是Java继承区别于C++继承的一个特性。
-
5. 但是继承提高了类之间的耦合性
多态:同一种行为、或者描述在不同的对象上,可以有不同的行为或状态,在程序中同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向父类的指针,来调用实现子类中的方法。也就是多态是同一行为具有多种不同表现形式或形态的能力。
多态具有以下六点优势
- 1. 消除类型之间的耦合关系
- 2. 可替换性
- 3. 可扩充性
- 4. 接口性
- 5. 灵活性
- //6. 简化性 还不能理解
接口和抽象类:
在Java面向对象中,所有的对象都是类来映射的,但并不是所有的类都不是用来映射对象的。如果一个类中的方法没有包涵信息来描述对象,那么这就是一个抽象类。抽象类是包含抽象方法,而抽象方法是abstract修饰的没有具体实现方法。
1. 抽象类不能被实例化,但是可以定义成员变量、初始化块、构造方法等...
2. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
3. 构造方法,类方法(用static修饰的方法)不能声明为抽象方法。
4. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
抽象类可以用于模板设计。
接口(interface),在Java是一个抽象类型并不是类,而是指定的标准,接口是抽象方法和常量的集合。接口本身也不能实例化。
在实现(implements)时,一个类可以实现多个接口,继承又实现时应先继承在实现。一个接口也能继承(extends)接口。
接口是保证了OCP、LSP、DIP、ISP、LOD原则的实现,更容易使程序扩展、解耦、提高系统的稳定性。
在重写接口时要注意三点:
- 1.类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者在继承接口的抽象类中抛出该强制性异常。
- 2.类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
- 3.如果实现接口的类是抽象类,那么就没必要实现该接口的方法。