面向对象整理

本文详细阐述了面向过程和面向对象两种编程思想的差异,包括它们在汽车租赁系统实现上的应用。面向过程注重过程,代码可复用性和可拓展性较差,而面向对象强调封装、继承和多态,提供了更好的代码组织和复用。通过对比,展示了面向对象的三大特征:封装、继承和多态,并探讨了抽象类、接口、抽象方法、访问权限修饰符等概念。此外,还讨论了抽象类与接口的区别以及面向接口编程的重要性。
摘要由CSDN通过智能技术生成

面向过程和面向对象的区别

面向过程编程思想不考虑封装,继承,多态这些事情,直接定义数据为静态变量,用静态函数操作数据,基于过程编程。面向过程编程,代码不具有可复用性和可拓展性。

面向对象思想需要先抽象出实体的结构,并用类进行封装,,用成员变量表达实体的属性,用成员方法封装对实体属性的操作。提供构造方法构造对象,基于对象编程。面向对象编程,代码具有可复用性和可拓展性。

举例:实现汽车租赁系统

        面向过程的思想:

                定义多个静态数组,存储汽车各项数据,直接定义静态函数实现各种业务过程。

        面向对象的思想:

                先抽象出汽车的实体结构,并用汽车类进行封装,然后创建汽车数组存储汽车实体的数据,在考虑业务功能的实现,对对象进行操作。

面向对象的三大特征

1.封装

        用成员变量来描述对象的属性,并用private进行私有化封装,不对外暴露对象的属性(防止外部误对属性误操作),用成员方法来封装对属性的操作,并暴露给外部调用,典型的成员方法就是setter和getter,一个是提供给外部进行属性设置,一个是提供给外部读取属性的值。

2.继承

        继承是Java中类与类之间的一种关系

        关键字:entends

        发生继承的是子类,被继承的类是父类

        java不支持多继承,只支持单继承,但支持多级继承。一个类只能继承一个父类,但是一个类可以有多个子类

        如果一个类没有显示继承父类,则隐式继承Object类

        子类可以继承父类的非私有(private)成员

        父类的构造方法不能继承,但可以使用super()调用

        父类的静态成员与继承无关

        父类中如果含有抽象方法的话,子类必须要进行方法重写,或者将类改为抽象类,让子类的子类去方法重写(实现),抽象类中不一定含有抽象方法,但一个类中含有抽象方法,则这个类必须为抽象类。

3.多态

先有显示继承后有多态,多态的反义词单态

1.指针的多态(数组的多态,参数的多态,返回值的多态归根结底都是指针的多态)

        如果指针是具体的子类类型,则指针是单态指针,只能指向具体的子类对象

        如果指针是抽象的父类类型,则指针式多态指针,可以指向任意子类的对象

2.方法的多态(1.基于重载实现  2.基于重写实现)

        重载是编译时多态的体现

        重写是运行时多态的体现

重载和重写

重载和重写都是方法多态的体现

重载(overload)是编译时多态的体现

        1.发生在一个类中,Java允许同一个类中的多个方法以重载的要求同名。 

        2.重载的要求:方法名相同,方法的参数列表不同(可以是参数个数不同或者是参数类型)

        3.静态方法,构造方法,成员方法都可以重载。

重写(ovveride)是运行时多态的体现

        1.重写发生在子类与父类之间,子类重写父类的方法,其目的是:当使用父类的指针调用子类的方法的时候可以无需做向下转型。

        2.子类方法与父类方法同名

        3.访问修饰符要大于等于父类

        4.参数的个数必须与父类一样,参数类型可以小于父类方法的参数类型

        5.返回值类型可以小于等于父类方法的返回值

抽象类和抽象方法的关系

1.抽象类和抽象方法都需要使用abstract关键字修饰

2.抽象方法必须出现在抽象类中

3.抽象类中可以有抽象方法也可以没有

普通类和抽象类的区别

普通类可以实例化(创建对象),也可以继承

抽象类不可以实例化(创建对象),只能被继承。

向上转型和向下转型的区别

向上转型

1.向上转型:将子类对象(指针)赋给父类指针的语法,隐式的。

2.继承是向上转型的前提,向上转型目的是实现多态的指针。

3.向上转型的副作用:指针无法访问下级对象中的成员(除非发生了重写)。

向下转型

1.向下转型:将父类型指针赋给子类型指针的语法。需要显示的强制转换,通常伴随着Instanceof做类型判断,否者可能会出现ClassCastException 类型转换异常

2.指针向下转型为子类类型,就可以访问子类中特有的成员了(非重写的方法)

访问权限修饰符

修饰符当前类同包子类其他包
private私有的可见不可见不可见不可见
(default)默认的可见可见不可见不可见
protected受保护的可见可见可见不可见
public共有的可见可见可见可见

private 的特点:只有本类可见

default的特点:只有同包可见,同包的子类也可见

protected的特点:子类可见,不同包的子类也可见

public的特点:全部可见

抽象类和接口的区别

接口

1.接口也是一种源代码文件

        定义类的关键字是class

        定义接口的关键字是interface

2.接口的出现让java也能实现多继承,一个类只能继承一个父类,但是可以继续多个接口!
    子类继承/扩展父类,关键字是extends
    子类继承/实现/扩展接口,关键字是implements
3.接口与抽象类进行比较
    相同点:
        1.都可以作为指针的类型实现多态指针
        2.都不可实例化
    不同点:
        1.抽象类用abstract class定义,接口用interface定义
        2.抽象类用extends继承,接口用implements实现
        3.子类只能继承单继承,接口可以多继承(实现)。
        4.虽然两者都不可以被实例化,但是抽象类可以有构造方法,接口没有构造方法
        5.抽象类可以有抽象方法,也可以有具体方法,接口只能有抽象方法(虚方法),而且接口中的所有方法默认都是“public abstract”修饰的。
        6.抽象类可以有成员变量,接口不能用成员变量,只能有静态常量。
如何理解接口?如何理解面向接口编程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值