面向过程与面向对象
二者都是一种思想,面向对象是相对于面向过程而言的。面向过程强调的是功能行为,以函数为最小单位,考虑怎么做。 面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。例如:事件把大象装进冰箱。 面向过程:通过函数 打开冰箱门--找到大象,拿起大象--来到冰箱前--抬起大象--放进冰箱 一步一步把这个过程的细节完成。 面向对象:人这个对象里有属性和打开冰箱抬起大象的行为,大象这个对象,有其属性和行为,通过调用这些对象把这个事件完成。
面向对象编程
- 面向对象编程的三大特性:封装、继承、多态。
- 类与对象:相似对象的集合和抽象就是类,类的一个实例是对象。、
- 类:对一类事物的描述,是抽象的、概念上的。
- 对象:定义一个类后,类不能直接调用,需要把类实例化为一个对象在对其进行调用等操作。对象是一个独立的单位,它具有自己的静态特征(属性)和动态特征(行为),(一个对象由一组变量(属性)和方法(行为)构成,通过变量描述其属性,通过方法描述其行为。)
- 封装 (特点:模块化和数据隐藏)
Java的封装性是利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏内部的细节,只保留一些对外接口使之与外部发生联系。
- 继承与多态
继承:Java的继承性是指子类对象拥有其父类的全部属性和方法。子类不仅可以继承父类的属性和方法,还可以添加新的属性和方法。(继承也是把类实例化为对象的体现)
多态的两种体现:
1、对象多态性,体现在父、子对象之间的转型上
(1)向上转型(Upcast)(自动转型):父类 父类对象=子类实例
将子类对象赋值给父类对象,这样将子类对象自动转换为父类对象。这种转换方式是安全的。
public class Animal{
void shout(){
System.out.println("动物都会叫!");
}
public static void main(String [] args){
Cat white=new Cat();
Animal some = new Cat();//向上转型 把子类赋给父类
some.shout();
}
}
class Cat extends animal{
void shout(){
System.out.println("喵喵喵!");
Cat mi=new Animal();//向下转型 把父类赋给子类。
mi.shout();
}
}
(2)向下转型(Downcast)(强制转型):子类 子类对象=(子类)父类对象
将父类对象赋值给子类对象。这种转换方式是非安全的。在特定背景下如果需要父类对象转换为子类对象,就必须使用强制类型转换。
2、方法多态性,体现在方法的重载和覆写上
方法的重载是指同一个方法名称,根据其传入的参数类型、个数和顺序的不同,所调用的方法体也不同,即同一个方法名称在一个类中有不同的功能实现;
public class exp5 {
final float PI=3.1415926f;
public void getArea(float r) {
float arae = PI*r*r;
System.out.println("半径为"+r+"的圆的面积是:"+area);
}
public void getArea(float a,float b) {
float area =a*b;
System.out.println("长为"+a+"宽为"+b+"的矩形面积是:"+area);
}
public static void main(String[] args) {
exp5 emo=new exp5();
emo.getArea(20, 30);
emo.getArea(7);
}
}
方法的覆写(重写)是指父类之中的一个方法名称,在不同的子类有不同的功能实现,而后依据实例化子类的不同,同一个方法,可以完成不同的功能