一、简述面向对象
面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。
在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。
对于面向对象的开发来讲也分为三个过程:OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。
二、类和对象简介
类:类是现实世界在计算机中的反映,它将数据和对这些数据的操作封装在一起。是抽象概念的集合。
对象:类的实例。每个对象具有自己独立的属性,依靠不同属性来区分不同对象。
三、面向对象基本特征
在Java中面向对象有三大基本特征:
(1)封装:保护内部的操作不被破坏;
(2)继承:在原本的基础之上继续进行扩充;
(3)多态:在一个指定的范围之内进行概念的转换。
封装:如果是类中内部使用,成员变量和方法使用private访问修饰符修饰,如需要开放给外部调用赋值,一般会保持成员变量为private,对外提供一对get\set方法进行赋值。
继承:当公用逻辑是公用时,抽取到父类,不同子类的行为不同时,再提供抽象方法或空实现方法让子类进行复写,继承使用extend关键字。
多态:子类复写父类方法,子类实例赋值给父类类型,调用父类方法,会调用子类复写后的方法。
重载(overload)和重写(override)的区别:
①重载:是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
②重写:是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。
四、类的定义和使用
定义:Java中使用class来定义一个类
class Student{
属性;
方法;
}
例子:
class Student {
private String name;
private int age;
private int id;
public void study(){
System.out.println(name+"在学习");
}
在定义完类后,不能直接使用,要使用一个类需要将他实例化:
格式:声明加实例化对象
Student student = new Student();
引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。
当一个实例化对象产生之后,可以按照如下的方式进行类的操作:
对象.属性:表示调用类之中的属性;
对象.方法():表示调用类之中的方法。
五、从jvm内存来分析
(1)堆内存:保存对象的属性内容。堆内存需要用new关键字来分配空间;
(2)栈内存:保存的是堆内存的地址(在这里为了分析方便,可以简单理解为栈内存保存的是对象的名字)。
在代码执行:Student student
后会在栈内存出现student指向空。执行student = new Student()
后会在堆内存中出现Student类中定义的属性栈内存中的student会指向堆内存。