【基础】浅谈面向对象
(1)面向对象和面向过程的区别
- 面向过程:面向过程性能比面向对象高。因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、linux等一般采用面向过程开发。但是面向过程没有面向对象易维护、易复用、易扩展。
- 面向对象:面向对象易维护、易复用、易扩展。因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。面向对象性能比面向过程低。
(2)认识JVM、JDK、JRE
(2.1)JVM虚拟机
Java虚拟机(JVM)是运行java字节码的虚拟机。JVM是针对不同系统的特定实现,目的是使用相同的字节码,它们都会给出相同的结果。
字节码也就是JVM能够理解的代码,扩展名为 .class的文件。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。
JVM 类加载器首先加载字节码文件,然后通过解释器逐行解释执行。
(2.2)JDK
JDK 是 Java Development Kit,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。
(2.3)JRE
JRE 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,包括 Java 虚拟机(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于创建新程序。
(3)认识面向对象三大特性:封装、继承、多态
(3.1)封装
封装就是把一个对象的属性使用private修饰变成私有化属性,同时提供一些可以被外界访问的属性的方法(setter、getter),当然有些不想别外界访问的对象也可以不提供外界访问方法。
(3.2)继承
继承时使用已存在的类的定义作为基础建立新类,子类的定义可以增加新的数据或者新的功能,也可以直接使用父类public的功能,但是不能选择性的继承父类。通过使用继承我们可以方便的复用以前的代码,有效的避免代码泛滥。
注意点:
- 子类拥有父类对象所有的属性和方法,包括私有属性和私有方法,但是父类中的私有属性和方法不能被子类访问和调用,子类知识拥有 父类的private属性,但是不能使用。
- 子类在拥有父类的属性和方法的基础上,还可以拥有自己的属性和方法,也就是对父类进行扩展
- 子类可以用自己的方式实现父类的方法,也就是重写
(3.3)多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过这个引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。也就是说一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
在java中有两种方式可以实现多态:
- 继承:多个子类对同一个方法的重写
- 接口:实现接口并且覆盖接口中同一方法