C++、java、C#、Python、Php等语言均支持OOP,但是有很多规则,他们却不尽相同,本文重点总结一下几种语言在OOP中的共性与特性,只要把这些点区分开,其实几种语言的代码你就都可以运用自如。

详见下表:

C++

Java

C#

Python

PHP

 Lua

强类型(静态类型)

强类型(静态类型)

强类型(静态类型)

弱类型(动态类型)

弱类型(动态类型)

 弱类型(动态类型)

1.支持多继承
2.
privateprotectedpublic三种继承方式

1.不支持多继承
2.
只有一种继承方式(关键字extends

1.不支持多继承
2.
只有一种继承方式(无关键字,class B : A)

1.支持多继承

2.只有一种继承方式(无关键字:class C(B,A)

1.支持多继承

2.只支持一种继承方式(关键字extends

不支持继承,但可用metatable实现 

1.无接口概念

1.有接口概念

2.支持接口多继承

1.有接口概念

2.支持接口多继承

1.无接口概念

1.有接口概念

2.支持接口多继承

 1.无接口概念

支持函数重载

支持函数重载

支持函数重载

1.不支持函数重载

2.可通过默认参数实现重载

1.不支持函数重载

2.可通过默认参数实现重载

1.不支持函数重载

2.可通过默认参数实现重载

支持子类覆盖父类方法

支持子类覆盖父类方法

支持子类覆盖父类方法

支持子类覆盖父类方法

支持子类覆盖父类方法

支持子类覆盖父类方法 

不可封装属性不可封装属性可以封装属性可以封装属性不可封装属性

 不可封装属性

隐藏成员变量使用:private/protected隐藏成员变量使用:private/protected隐藏成员变量使用:private/protected变量名称前加双下划线隐藏成员变量使用:private/protected

 变量用local修饰

this->访问成员this.访问成员this.访问成员self.访问成员$this->访问成员

 self.访问成员

构造函数为类名构造函数为类名构造函数为类名__init____construct

 无此概念

析构函数为~类名无需自己析构无需自己析构__del____destruct

 无此概念