JAVA面向对象编程——初识面向对象、方法回顾和加深、对象的创建分析、面向对象三大特性、instanceof和类型转换、static关键字详解、抽象类和接口、内部类及OOP实战

初识面向对象

在这里插入图片描述

面向对象的三大特性:

封装、继承、多态

类里面的四种权限(权限由低到高):

public、protected、default、private

面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据。

方法回顾和加深

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gXmuAK7n-1611669813374)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125172239975.png)]

一、方法的调用

在一个class文件中写了方法,如何在另一个class文件中调用。

第一种如果是非静态方法,需要先将类实例化,再进行调用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lR2FEcUg-1611669813377)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125183950981.png)]

第二种如果是静态方法,直接调用就可以了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YspZ3DAV-1611669813380)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125184118186.png)]

第三种是一些特殊的情况,针对的是同一个文件夹中。

加了static的方法都是和类一起加载的,所以如果在类里面都是可以直接调用的,如果是其他的类的static方法,可以使用“类.方法名”进行调用。

但是普通的方法,也就是不加static的方法都是类实例化之后进行调用的,不进行实例化直接进行调用是会出问题的,如下面的这张图片。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMZK0gWf-1611669813382)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125184814578.png)]

二、值传递和引用传递

首先明确的是JAVA为值传递。值传递如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1bnWXB7I-1611669813384)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125190959639.png)]

引用传递如下:

在这里插入图片描述

对象的创建分析

一、创建初始化对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tGnKbxFJ-1611669813385)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125195908435.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJmOIhA8-1611669813386)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125201116121.png)]

二、构造器详解(其实就是C++中的构造函数)

构造函数有两个特点:1、必须和类的名字相同。2、必须没有返回类型,也不能写void。

这里有个注意的地方就是this的使用,this指代的就是这个类。

无参构造和有参构造的区别

alt+insert是idea快速写构造函数一键生成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lGzGXrIL-1611669813387)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125203018662.png)]

一旦定义了有参构造,实例化的时候用了无参构造,必须显示的定义无参构造;如下图:
在这里插入图片描述

构造函数的总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRHd6aYy-1611669813388)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125205403790.png)]

创建对象内存分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMDurxi2-1611669813389)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125211906710.png)]

面向对象三大特性

一、封装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wp6z7u7s-1611669813390)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125212755290.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1BgXoYP-1611669813391)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125215040506.png)]

二、继承

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jwzLryhR-1611669813392)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210125223743249.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVkIQTE5-1611669813393)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126104230230.png)]

单继承—只能继承多个父类,不能继承多个父类。

1)、object类

在JAVA中,所有的类都默认直接或者间接继承Object。

2)、super详解

super这里可以和this进行对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iiFj726I-1611669813394)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126110453417.png)]

这里是方法的调用对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D2wtMlZ7-1611669813394)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126110737795.png)]

构造器的调用对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02xp0Lyp-1611669813395)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126112530730.png)]

只要写了有参构造以后,无参构造就没有了。父类没有无参构造,就无法调用无参构造,这个时候子类就只能调用有参构造。

总结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e8teW6B6-1611669813396)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126113424702.png)]

3)、方法重写(重写都是方法的重写,与属性无关)

静态方法和非静态方法有区别,而重写只和非静态方法有关,而且重写的方法只能是public,不能是私有的。

下面是静态的方法,不能算重写。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d60WdFeL-1611669813397)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126194851978.png)]

下面这个非静态方法才叫重写:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KDseKmPb-1611669813398)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126194947113.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YT8wXSWx-1611669813399)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126201317909.png)]

三、多态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFwR8Y66-1611669813400)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126201818737.png)]

首先Student是Person的子类,eat()是子类独有的方法,父类定义出来的对象是不可以用的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cJAmOzcj-1611669813401)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126202735264.png)]

这里强制转换之后就可以调用了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qSo75oL4-1611669813402)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126202802514.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IbyDAaCd-1611669813402)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126203941680.png)]

instanceof和类型转换

instanceof 通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJlreKmg-1611669813403)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126205235403.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JeREDhzR-1611669813403)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126211427397.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o5u5KGFb-1611669813404)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126212100316.png)]

static关键字详解

类名就可以直接调用关键字修饰的东西,但是不加static修饰的方法需要实例化进行调用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6mQuFJR-1611669813405)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126215413602.png)]

这里需要注意的是静态方法块只执行一次,后面均不会再进行执行。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSF5kC1h-1611669813406)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126215747423.png)]

抽象类和接口

一、抽象类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sXQwE0HF-1611669813406)(C:\Users\wl\AppData\Roaming\Typora\typora-user-images\image-20210126220325910.png)]
在这里插入图片描述
二、接口
在这里插入图片描述
首先要将接口定义出来,把接口这些东西都写好。
在这里插入图片描述
然后接口用多继承进行实现。
在这里插入图片描述

内部类及OOP实战

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_32651847/article/details/113198684