各类型编程语言对比
面向对象式编程(Java、C++):面向对象编程,是一种程序设计范式,也是一种编程语言的分类。它以对象作为程序的基本单元,将算法和数据封装其中,程序可以访问和修改对象关联的数据。在面向对象编程中,我们可以操作对象,而不需要关心对象的内部结构和实现。
面向过程式编程(C):是一种以过程为中心的编程思想, 分析出解决问题的所需要的步骤,然后用函数把这些步骤一步一步实现,然后依次调用;
面向函数式编程(scala):函数式编程(Functional Programming, FP)是一种编程范式,它将计算视为数学中函数的求值过程,并避免使用程序状态及可变数据。在函数式编程中,函数被视为"第一等公民",这意味着函数可以作为参数传递、作为返回值,甚至可以赋值给变量。函数式编程强调使用一系列的函数来处理数据,而不是依赖于数据的状态变化。
封装、继承与多态
封装
概念: 将一些属性和相关方法封装在一个对象中,对外隐藏内部具体实现细节。内部实现,外界不需要关心,外界只需要根据“内部提供的接口”去使用就可以。
好处: 使用起来更加方便:因为已经把很多相关的功能,封装成一个整体,类似于像外界提供一个工具箱,针对于不同的场景,使用不同的工具箱就可以;
保证数据的安全:针对于安全级别高的数据,可以设置成”私有“,可以控制数据为只读(外界无法修改),也可以拦截数据的写操作(进行数据校验和过滤);
利于代码维护:如果后期,功能代码需要维护,则直接修改这个类内部代码即可;只要保证接口名称不变,外界不需要做任何代码修改。
继承
概念: 通过必要的说明能够实现某个类无需重新定义就能拥有另一个类的某些属性和方法,这种关系就称为继承,并且允许多层的继承关系。先定义的类称为父类(基类、超类),后定义的类称为子类(派生类)。
注:Java中只能单继承(一个子类继承一个父类),而Python、C++中则支持多继承
多态
多态是指父类的变量可以指向子类对象。允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。
重写与重载
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写。子类的对象使用这个方法时将调用子类的定义,对它而言,父类中的定义如果被覆盖了。
如果一个类中定义了多个同名的方法,它们或有不同的参数个数,或有不同的参数类型,则称为方法的重载。重载的方法可以修改返回值的类型。
构造方法的特殊之处
- 构造方法必须比类目相同
- 构造方法没有返回值,但不用
void
声明 - 构造方法不能使用
static
、final
、abstract
、synchonized
和native
等修饰符 - 构造方法不能像一般方法那样用
对象.构造方法()
显示地直接调用,应用new关键字调用构造方法,给新对象初始化
实例方法与类方法
static
修饰地方法称为类方法(或静态方法),而没用static修饰地方法称为是实例方法,二者调用方式不同。
实例方法属于实例,必须通过实例调用;类方法属于类,一般通过类名调用,也可以通过实例调用。二者访问地成员不同。实例方法可以直接访问该类地实例变量和实例方法,也可以访问类变量和类方法;类方法只能访问该类地类变量和类方法,不同直接访问实例变量和实例方法。
类方法要访问实例变量或调用实例方法,必须首先获得该实例,然后通过该实例访问相关地实例变量或调用实例方法。
抽象类与接口
相同点:抽象类和接口都可以有抽象方法,都不可以被实例化
不同点:
- 创建类关键字不同:抽象类用关键字
abstract
,接口用关键字interface
创建 - 成员变量不同:抽象类可以包含普通的变量,接口内的变量只能是
final
的 - 方法不同:抽象类可以包含普通的方法,接口内只能有抽象的方法,且都是
public
的 - 继承/实现不同:接口可以被多实现,抽象类只能被单继承
Java权限修饰符
在Java编程语言中,权限修饰符用于控制类、变量、方法和构造器的访问级别。Java中有四种主要的权限修饰符:public、protected、default(不写)和private。
public修饰符
public修饰符提供了最广泛的访问权限,可以应用于类、成员变量、成员方法和构造方法。使用public修饰的元素可以在任何其他类中访问,无论这些类是否在同一个包中,或者甚至在不同的包中。
private修饰符
private修饰符是最严格的访问控制级别,只能用于成员变量、成员方法和构造方法,但不能用于修饰类(指外部类,内部类除外)。private修饰的元素只能在其所在的类内部访问。尽管如此,可以通过set和get方法向外界提供访问这些私有成员的方式。
default修饰符
default修饰符不需要写出任何关键字,它是当没有指定任何访问修饰符时的默认访问级别。default修饰的元素只能被同一个包中的类访问。
protected修饰符
protected修饰符提供的访问权限介于public和default之间。它可以用于成员变量、成员方法和构造方法,但同样不能用于修饰类(外部类,内部类除外)。protected修饰的元素可以被同一个包中的其他类访问,以及不同包中的子类访问。但是,如果不同包中的类想要访问protected修饰的成员,这个类必须是其子类。
使用原则
在实际开发中,通常遵循最小权限原则,即尽可能使用最严格的访问级别。属性通常使用private封装起来,方法一般使用public以供调用。如果方法需要被子类继承,通常使用protected。default修饰符使用得较少,通常是新手在不了解修饰符的情况下使用。
通过以上的访问修饰符,Java允许我们在设计类时对信息进行封装,并控制对于类成员的访问级别,这是实现面向对象编程中封装特性的重要手段。