面向对象

Java面向对象

简介

面向对象
面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物封装成一个一个的整体进行描述,使被描述的对象具备一些系统性、整体性的的行为和特征,我们把这种设计思想称为面向对象。
面向对象与面向过程
面向过程是早期的程序语言设计思想,该思想强调事物的行为细节,即程序的设计不需要封装成一个个的整体,而是将整个程序描述成一个行为,所有行为细节都按照固定方式一步一步的执行,执行程序就是执行某一行为的过程。

面向对象和面向过程都是一种思想,面向对象是相对于面向过程而言的,面向过程强调的是具体的功能行为,而面向对象将功能封装进对象,强调具备了功能的对象,面向对象是基于面向过程的,但面向对象思想更接近于现实场景。
三大特征
封装、继承、多态(封装和继承几乎都是为多态而准备的)

封装

封装:
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处:
1、将外界的变化隔离,使程序具备独立、安全和稳定性。
2、便于设计者使用,提高代码的复用性。
封装的原则:
1、将不需要对外提供的内容都隐藏起来。
2、把实现细节隐藏,提供可以对其进行访问公共的方式。
封装的方式:
将某一功能、属性抽离出来,独立写成单独的方法或类。
设置访问权限:
1、设置访问权限可以限定该功能或属性可以被特定的访问者访问,保证了程序的安全性和功能的稳定性。
2、Java对类和类中成员都定义了特定的访问修饰符。
类中成员:public(公共的)、protected、default(默认的)、private

注:类的访问修饰符可以不写(默认的),也可以写public(公共的),一个java文件中只能有一个被public修饰的类,且被public修饰的类类名必须要跟文件名一致(包括大小写一致),否则编译会出错,为了方便阅读,类名的命名规范是单词的首字母大写,多个单词组成的类名每个单词的首字母都大写。

继承

继承:

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的功能,或者说将事物的共性的功能和属性抽取出来定义成一个父类,让后来具有更多样化实现的子类继承父类。

继承的作用:

1、父类具备的方法子类可以直接继承过来,不用重新书写,提高了代码的复用性。

2、让类与类之间产生关系,有了关系才有多态的实现。

3、Java中只支持单继承,不支持多继承,因为多继承存在安全隐患(当多个父类存在同个功能时,子类不确定要运行哪一个),Java支持多层继承,即父类还可以继承其他类,java用另一种机制解决单继承的局限性,即多实现。

对继承体系的使用:

1、想要使用体系,应该先查阅父类,因为父类定义了该体系的共性功能,了解了父类的功能,就基本可以使用该体系的功能了。

2、在具体调用时,要创建子类的对象,因为有可能当父类是抽象类时父类不能创建对象,而且子类具备更丰富、更具体的功能实现。

继承的特点:

覆盖(重写):

1、如果子父类中的成员一致时,子类成员会覆盖父类成员。

2、当子类继承父类时,沿袭父类的功能到子类中,但子类对该功能的实现细节不一致,子类可以保留父类对该功能的定义,重写功能的内容。

3、覆盖与重载:重载只看参数列表,其他一致参数列表不一致为重载,而重写子父类的参数必须要一致。

This与Super:

this表示当前对象的引用,super表示当前对象父类的引用。

子父类中的构造函数:

构造函数不能重写:

1、构造函数第一行有一条隐式的语句super()/this()。

2、在对子类对象进行初始化时,父类构造函数也会运行,因为子类中的构造函数默认第一行有一条隐式的super()语句,这样方便子类构造时先获取到父类的共性属性。

3、super()一定要定义在子类构造函数的第一行,当没有默认的空参数构造函数,要手动指定。

注意事项:

1、千万别为了获取其他类中的功能而继承,必须是类与类间有所属关系才可以继承。

2、子类覆盖父类时必须保证子类权限大于等于父类,才可以覆盖,否则编译失败。

3、子类静态成员只能覆盖父类静态成员。

Final关键字:

1、final关键字可以修饰类、函数和变量。

2、被final修饰的类不可以被继承(继承打破了封装性)。

3、被final修饰的方法不可以被复写。

4、被final修饰的变量只能被赋值一次,既可以修饰成员变量,也可以修饰。

Object类:

1、java中有一个特殊的类,Object类,它是所有对象的超类(根类),Object类中定义了所有对象的共性成员。

2、Object类中的方法:

equals()  比较两个对象是否相同
toString()  返回该对象的字符串表示形式
getClass()  获取该对象对应的字节码文件对象
hasCode()  获取该对象的哈希码值

类间的体系关系:

继承、聚集(聚合)、组合

1、继承:

指的是一个类继承另外的一个类的功能,并增加它自己的新功能或改写旧有功能的具体实现,继承是类与类之间最常见的关系。

2、聚合:

指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如足球队中的足球队员就是聚合关系。

3、组合:

也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。例如人的各个身体器官之间的关系。


多态

多态的定义:
某一类事物具备的多种表现形态(猫、狗和动物)。
Java中多态的表现形式:
父类的引用指向自己的子类对象。
父类的引用接收自己的子类对象。
多态的前提:
必须是类与类之间有关系,要么继承,要么实现。
子父类间的成员存在覆盖。
多态的好处与缺陷:
好处是提高了程序的扩展性,缺陷是只能使用父类的引用访问父类的方法,无法访问子类的特有方法。
多态的应用:
类型转换
向上转型,自然转型。
向下转型,强制父类引用向下转型。
特点:
多态中成员函数的特点:
编译时看引用变量所属的类中是否有方法。
运行时看对象所属类的方法。
多态中成员变量的特点:
无论编译或运行时都参看右边。
多态中静态成员函数的特点。
编译或运行时都参看左边。
多态的扩展示例:
数据库操作(各种数据库):
定义数据库的父类型,由哪类型的数据库调用就由该子类实现其具体操作内容。

Java面向对象概念

1、什么是面向对象?

面向对象是一种使用封装、继承、多态、抽象等思想进行软件的分析和开发的方法,而java就是一门面向对象编程的语言。

2、谈谈你对封装的理解。

封装就是将实体的属性和行为包装成一个具体的对象,并控制在程序中对其属性的读取、修改。并仅对外公开接口也就是方法,以隐藏对象的属性和实现细节的目的。

3、谈谈你对java中继承的理解。

继承就是从已有的类和接口中派生出一个新的类和接口,并根据继承规则能从父类和接口中吸收一些属性和行为作为己用,还可以能通过自定义一些自己的属性和方法来扩展新的能力。

Java中的类只能有一个父类,也就是说类不支持多继承机制,默认情况下java.lang.Object是一个类的直接父类;但是接口则可以继承多个父级接口,支持多继承。

4、谈谈你对java中的多态的理解。

多态分为编译时多态和运行时多态。

编译时多态是指编译器编译期间,根据同一对象或者类中相同名称方法的参数列表的不同(函数签名不同),来决定调用那个方法的多态行为。也就是 指的是java中的方法重载。

运行时多态是指程序运行期间,同一方法会根据调用对象的类型不同,分别去执行其实际的类型的相应方法。一般多发生在方法覆盖的情况下。

动态绑定是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

5、谈谈你对抽象的理解。

抽象就是通过特定的实例抽取共同特性后形成概念的过程。它强调主要特征,忽略次要特征。在java中主要体现在类上。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值