面向对象基于面向过程,一切事物皆对象。面向对象就是将事物的共性(属性、行为)抽象成类,创建类相关的对象(类实例化后才是对象),描述对象解决问题的步骤中的行为(方法)。
类是对象的抽象,而对象是类的具体实现。类是抽象的不占用内存,实例化的类才占内存。
(1)编程思路不同:面向过程以实现功能的函数开发为主;而面向对象要先抽象出类、属性及其方法,然后实例化类、执行方法来实现功能。
(2)封装性:都具有封装性,但是面向过程封装的是功能;面向对象封装的是数据和功能。
(3)面向对象具有继承性和多态性,面向过程没有。
面向过程:
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象:
**优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合(因为类职责单一,相互间联系较少)的系统,使系统 更加灵活、更加易于维护 **
缺点:性能比面向过程低
(1)封装:通常认为封装是把数据和操作数据的方法封装起来,对数据的访问只能通过已定义的接口。
(2)继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类/基类),得到继承信息
的被称为子类(派生类)。
继承的3点补充:
1、⼦类拥有⽗类对象所有的属性和⽅法(包括私有属性和私有⽅法),但是⽗类中的私有属性和⽅法⼦类是⽆法访问,只是拥有。因为在⼀个⼦类被创建的时候,⾸先会在内存中创建⼀个⽗类对象,然后在⽗类对象外部放上⼦类独有的属性,两者合起来形成⼀个⼦类的对象;
2、⼦类可以拥有⾃⼰属性和⽅法;
3、⼦类可以⽤⾃⼰的⽅式实现⽗类的⽅法。(重写)
(3)多态:分为编译时多态(方法重载)和运⾏时多态(方法重写)。
要实现多态需要做2件事:
1、是⼦类继承⽗类并重写⽗类中的⽅法;
2、是⽤⽗类型引⽤⼦类型对象,这样同样的引⽤调⽤同样的⽅法就会根据⼦类对象的不同⽽表现出不同的⾏为。
public class PolymorphismTest { public static void main(String[] args) { //运行时多态 SuperClass clazz = new SubClass2(); clazz.method(); } } //父类 class SuperClass { public SuperClass() { System.out.println("父类的构造方法"); } public void method() { System.out.println("父类的method()-普通子弹"); } } //子类1 class SubClass1 extends SuperClass { public SubClass1() { System.out.println("子类1的构造方法"); } @Override public void method() { System.out.println("子类1的method()-火焰弹"); } } //子类2 class SubClass2 extends SuperClass { public SubClass2() { System.out.println("子类2的构造方法"); } @Override public void method() { System.out.println("子类2的method()-冰冻弹"); } }
结果:
父类的构造方法 子类2的构造方法 子类2的method()-冰冻弹
JVM(Java Virtual Machine):是 Java 虚拟机,是整个 Java 实现跨平台的最核⼼的部分,能够运⾏以 Java 语⾔写作的软件程序。所有的 Java 程序会⾸先被编译为 .class 的类⽂件,这种类⽂件可以在虚拟机上执⾏。
JRE( Java Runtime Environment):是 Java 的运行时环境,包含 JVM 标准实现及 Java 核⼼类库。
JDK(Java Development Kit):是 Java 开发工具包,是整个 Java 的核⼼,包括了 Java 运⾏环境 JRE、Java 开发⼯具和 Java 基础类库。