Java是一种高级编程语言,它具有简单、面向对象、跨平台等特点。Java技术点包括但不限于以下几个方面:
总之,Java技术点非常广泛,不仅仅包括语言本身的基础知识,还包括各种常用库、框架、工具等。对于Java开发人员来说,深入学习Java技术点可以提高开发效率和质量。
面向对象编程是一种编程范式,它将程序中的数据和操作数据的代码组织成对象,以此来描述现实世界中的问题。在面向对象编程中,程序被看作是一组相互作用的对象,每个对象都可以执行特定的操作,通过消息传递来协调彼此的行为。
面向对象编程强调对象的概念,而不是过程或函数。
面向对象编程具有封装、继承、多态等特性。封装将数据和方法结合在一起形成类,隐藏了对象内部的细节,只公开一些必要的接口。继承允许从已有的类派生出新的类,使得新类继承了旧类的属性和方法,同时也可以扩展或修改旧类的行为。多态指的是一个对象可以表现出多种形态,即同一个消息可以被不同的对象接收并有不同的行为。
面向对象编程具有易于维护、可扩展、可重用等优点,因此被广泛应用于各种软件开发领域。
面向对象开发有一些原则,也称为面向对象设计原则,这些原则可以指导开发人员设计出易于维护、扩展和重用的面向对象系统。以下是常见的面向对象开发原则:
这些原则旨在提高代码的可读性、可维护性、可扩展性和可重用性,帮助开发人员编写出高质量的面向对象程序。
对扩展开放,对修改关闭。
当需求发生变化时,在不修改软件实体源代码的情况下,可以进行功能扩展,使其满足新需求。
继承必须确保超类所拥有的性质在子类中仍然成立。
通俗来讲就是,子类可以扩展父类的功能,但不能改变父类原有的功能,即不可以重写父类的方法。
如果通过重写父类方法扩展新功能,写起来可能会很简单,但这会使整个继承体系的可复用性变得很差,特别是运用多态比较频繁时,程序很有可能会运行错误。
典型案例,“正方形不是长方形”,“鸵鸟不是鸟”。
要面向接口编程,不要面向实现编程。
原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
依赖倒置原则是实现开闭原则重要途径之一。
控制类的粒度大小,将对象解耦,提高其内聚性。
职责指类变化的原因,一个类应当有且只有一个引起它变化的原因,若有多个则该类需要拆分。如果一个对象承担了太多职责,至少会存在以下两个缺点:
一、当一个职责变化时,可能会影响该类实现其他职责的能力。
二、当客户端需要该对象的某一个职责时,不得不将其他不需要的职责全都包含进来,从而造成冗余代码或代码的浪费。
单一职责同样也适用于方法。一个方法应该尽可能做好一件事情,如果一个方法处理的事情太多,其颗粒度会变得很粗,不利于重用。
要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:
单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。
单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。
只与你的直接朋友交谈,不跟“陌生人”说话。
简单来说就是,如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
但过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。
软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。组合是“has a”关系,继承是“is a”关系。
组合就是A类的对象是B类的成员变量,相当于 A类是B类对象的一个属性。
例如,Dog类和Animal类应该使用继承关系,因为狗是动物;Person类和Head类应该使用组合关系,因为头是组成人体的一部分,即人有头。
如果要使用继承关系,则必须严格遵循里氏替换原则。合成复用原则同里氏替换原则相辅相成的,两者都是开闭原则的具体实现规范。
接口的多继承是指一个接口可以继承自多个其他接口。在Java语言中,类只能单继承,但是接口可以多继承。这样可以使得接口更加灵活,具有更高的复用性。
举个例子,假设我们有一个 Shape 接口表示图形,还有一个 Color 接口表示颜色,现在我们要定义一个新的接口 ColoredShape,它既要继承 Shape 接口,又要继承 Color 接口,就可以使用接口的多继承:
public interface Shape {
void draw();
}
public interface Color {
void setColor(String color);
}
public interface ColoredShape extends Shape, Color {
// 新的接口继承了 Shape 和 Color 接口
}
这样,实现 ColoredShape 接口的类就必须实现 draw() 和 setColor() 两个方法,同时具有图形和颜色的特征,可以实现更加灵活的设计和组合。