一、面向对象(oo)和面向过程(po)的区别?
面向对象是为了描述事务在解决问题之中的行为,而面向过程则是关注分析解决问题的步骤,然后进行一步一步的实现。
二、面向对象的三个基本特征和五大基本原则
三大基本特征分别为封装、继承、多态。
1.封装:就是把客观的事物封装成类(抽象),可信的可进行操作,而对于不可信的则进行隐藏
2.继承:oop的一种功能就是继承,主要是用来对类进行一些扩展。
它有三种方式:一、实现继承(继承类直接拿来使用)。二、接口继承(继承接口的方法名,然后进行实现和使用)。三、可视继承(可视化窗口子类与基类的继承关系)
而且继承之间是属于的关系,
OO开发范式:划分对象->抽象类->将类组织成为层次结构->用类来进行设计和实现几个阶段。
3.多态:包括覆盖和重载,在其中重载是前绑定,是在类初始化的时候编译器对其编译的时候对其函数名进行修饰,而覆盖则是后绑定,所以也可以说重载不属于面向对象, 不是晚绑定就不是多态。
五大基本原则:单一职责原则(接口、类或是方法等负责的功能是单一的)、开放封闭原则(对扩展开放,对修改封闭)、里式替换原则(子类可以替换父类)、依赖倒置原则(程序依赖于接口,不依赖于具体实现)、接口隔离原则(接口要小而专,不能写太大的接口)
三、java如何实现的平台无关
java语言被java虚拟机编译成字节码文件(.class)然后被字节码解释器进行解释,生成各个平台识别的机器指令,然后才被执行,实现了平台无关。而且字节码文件是有严格的格式要求的(如果我没记错的话)。
四、值传递
在方法调用过程之中,实参将值传递给形参,是将实参的值复制一份传递给形参,所以在方法中对形参进行操作,不会影响到实参,
引用类型传递的则是对象地址的值,因为地址指向的堆中存放的还是实参内的内容,操作的话一般是对堆中的内容进行操作,但是传进来的是地址如果对地址进行操作则不会影响到实参,所以说依然是值传递,只不过传递的是引用。代码如下
public static void update(Student student){
student=new Student();
student.setage(17);
}
public static void main(String args[]){
Student lili=new Student();
lili.setage(17);
update(lili);
System.out.println(lili.getage());
}