软构第九天:OOP编程语法

本文详细介绍了OOP的基础概念,包括类、对象、属性和方法,强调了封装、继承和多态的重要性。讲解了接口的作用,以及在Java中接口与抽象类的区别。此外,还讨论了继承与重写,final关键字的使用,以及多态中的子类型和重载。文章最后提到了泛型在集合中的应用,提醒读者要谨慎使用继承,并鼓励使用接口和抽象类来实现多继承效果。
摘要由CSDN通过智能技术生成


前言

上节课说了ADT的相关内容,这节课老师讲述了ADT思想在编程语言中的具体体现-》OOP。OOP思想我们已经很熟悉了,这次其实就算是复习。

一、OOP的基本概念

OOP最典型的特点就是封装,继承,多态。我们这里讲的更细一些,大概分为如下四点:
在这里插入图片描述

二、基本概念

类,对象,属性,方法

设计类的时候,我们需要注意该类的行为有哪些,状态有哪些,这构成了对象或类的两个基本的内容即方法属性
如下图所示,所有对象都是一个类的实例,该类规定了它的方法与作用域。类的方法与属性都是它的成员。类定义了类型与具体实现。如果不严格的说,我们可以把类的方法叫做接口(API),即定义了用户可以如何与实例进行交互。
在这里插入图片描述
而对象的话,除去上面所讲的内容,invoke a method其实就是调用一个方法,也就是call a function。
在这里插入图片描述
我们这里需要辨析一个内容,就是实例方法、实例成员变量与类方法、类成员变量。具体来说,类方法就是类声明的时候前面带有static修饰的,反之亦然。带有static修饰的方法,可以说只是实现一个过程而不保存状态。这种方法仅仅与类有关,可以通过类名直接调用(类似Math.abs()等)。而实例方法必须通过new一个对象来调用。
在这里插入图片描述
这种类方法,在程序实现的时候在内存中的存储也存储在类的栈中,而非对象的栈中。
在这里插入图片描述

三、接口

接口比较类似于没有属性和方法实现的抽象类,可以实现多继承。
在这里插入图片描述
我们在新建变量的时候最好通过接口名来创建,这样抽象程度更高,客户端体验也就越好。

改错:
在这里插入图片描述
首先这张图里我们知道,接口是不能有构造器的。另外下面它也不能直接用ArraySet做返回值,因为这样不够抽象(虽然讲道理编译也能过)。然后就是下面的实际ArraySet实现的时候没有重写contains方法,这样编译器必然会报错。
对于Java8之后的语法,我们可以在接口中包含static方法,这在以前是不被允许的,我们可以通过这种方法来确定所有的子类中包含名字相同的构造器,而不需要知道该接口的某个具体实现类的名字。
当然接口中不是完全不可以有函数体,除了static修饰,我们还可以通过default修饰接口中的方法。
在这里插入图片描述如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法
为什么要重写呢?是因为,类在继承接口中的default方法时,不知道应该继承哪一个接口中的default方法。
如果子类继承父类,父类中有b方法,该子类同时实现的接口中也有b方法(被default修饰),那么子类会继承父类的b方法而不是继承接口中的b方法。
在这里插入图片描述
接口在信息隐藏方面也有很大的作用,如:
在这里插入图片描述
我们可以把不同的属性或者方法用不同的字符来修饰以确保他们不同的安全性,如private,protected,public等
在这里插入图片描述
一些设计原则如下:
在这里插入图片描述

四 继承与重写

Java想要实现多继承只能通过接口来实现,我们不能通过一个类继承多个类。另外,除非我们有显而易见的理由去使用继承特性,否则应当尽量避免使用继承。
在这里插入图片描述
如果一个方法被final修饰,那么他所指向的地址就不能改变,即,他在子类中也无法被重写。同理,被final修饰的属性也不能更改指向的内容。另外被final修饰的类也不能被继承。

final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字final所修饰,它的取值在程序的整个执行过程中将不会改变。
假如说整个类都是final,就表明自己不希望从这个类继承,或者不答应其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出于安全方面的理由,我们不希望进行子类化(子类处理)。
在这里插入图片描述
在这里插入图片描述
除了接口还有抽象类。
抽象类除了用abstract修饰之外,其他的语法层面和普通的类没有什么区别。

五 多态 子类型 重载

在这里插入图片描述
注意重载和重写还是有一些显著区别的。重载的话,是方法层面的,重点是参数与返回值的
区别;而重写的话就是子类与父类间的关系。另外,重载在编译前就能检查到,重写的话得在运行时检查到,因为与重写相关的问题都与内存的分配相关,内存只有在运行时才会被分配。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另外我们需要学会集合中泛型的用法,在开发中十分方便。

总结

以上就是今天的大致内容,还是很多的。想要全部理解需要一定的时间,加油啊,爱看番的大哥哥(雾)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值