第七章: 面向对象编程(中级) 一

在这里插入图片描述

1.Idea

1.idea介绍

在这里插入图片描述
在这里插入图片描述

2.idea下载安装

在这里插入图片描述
在这里插入图片描述

3.idea的使用

1.初创一个项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里的srv就是源码,我们写的java项目的源代码都在这里
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.字体,界面,字符编码设置

在这里插入图片描述
在这里插入图片描述

这里可以修改字体(软件的字体),默认是12
在这里插入图片描述

Editor中的font可以调节代码的字体
在这里插入图片描述

调节粗体
在这里插入图片描述
此处可以改颜色主题在这里插入图片描述

字符编码
上面是全局编码
下面是项目编码
在这里插入图片描述
在这里插入图片描述

3.使用快捷键开发项目

在这里插入图片描述
this window就是在当前工作区下面工作
new window 就是开一个新的工作区进行工作
在这里插入图片描述
这边为引用传递,所以在下面的类中改变的arr,在main方法中也会被改变
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.idea快捷键

在这里插入图片描述
Keymap可以查看快捷键,比如搜索delete,可以查看删除的快捷键为ctrl+y
在这里插入图片描述
我们也可以将其修改成ctrl+d
先将其移除
在这里插入图片描述
再添加
在这里插入图片描述
改成ctrl+d(我没有改)
在这里插入图片描述
也可以再keymap中查看复制的快捷键,输入duplicate,看见复制快捷键为ctrl+d
在这里插入图片描述
在这里插入图片描述

勾选之后软件就会自动import
在这里插入图片描述
在这里插入图片描述
Idea软件默认的快速格式化代码的快捷键为ctrl+Alt+L
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Idea软件默认的运行快捷键为shift + F10(这里我改成了Alt+R)
在这里插入图片描述
在这里插入图片描述

第八条
在这里插入图片描述
在这里插入图片描述

第十一条
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.idea模版

在这里插入图片描述
在这里插入图片描述
这边可以自己添加模板
在这里插入图片描述
模板做好之后定义一下使用范围
在这里插入图片描述
常用模板
在这里插入图片描述

2.包

1.包的基本介绍

在这里插入图片描述
在这里插入图片描述

2.包原理

在这里插入图片描述
在这里插入图片描述

3.包快速入门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分别在xiaoming和xiaoqiang包下创建Dog类
在这里插入图片描述
在这里插入图片描述
上面的xiaoqiang的包将其写全,就可以不用引入import
在这里插入图片描述

4.包命名

在这里插入图片描述

5.常用的包

在这里插入图片描述
在这里插入图片描述

6.包的使用细节

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.访问修饰符

在这里插入图片描述
同类就是本类
在这里插入图片描述
在这里插入图片描述
这里的Test调用的是A中的main方法(public),main方法是A的同类
在这里插入图片描述
上面的test类是通过调用A中的public方法,本质上是A类对象访问本类的属性,而下面不是在调用A的方法而是直接跨类访问了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意事项(1)
在这里插入图片描述

注意事项(2)
以下两种会报错
在这里插入图片描述
在这里插入图片描述

在本类中调用m1,m2,m3,m4都没有问题
在这里插入图片描述
在同一个包,不同类中m4的调用会出错
在这里插入图片描述

在不同包中,只能访问m1
在这里插入图片描述

4.封装

1.封装介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.封装快速入门

在这里插入图片描述

这里给age赋值会出错,因为是private
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.封装和构造器

在这里插入图片描述
如果我们使用构造器,我们发现封装的效果就没了,我们写的set方法被构造器破解了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时我们可以将set方法写在构造器中,这样仍然可以验证数据
在这里插入图片描述
果然控制住了
在这里插入图片描述
在这里插入图片描述

4.封装课堂练习

以下设置可以去掉说明
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面这个balance属性本生的默认值就是0,所以可以不用设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

再创建一个TestAccount类进行测试
在这里插入图片描述

5.继承

1.为什么需要继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.继承原理图

在这里插入图片描述
在这里插入图片描述

3.继承快速入门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.继承使用细节

1.继承使用细节1

在这里插入图片描述

在这里插入图片描述

一个父类base
在这里插入图片描述
在这里插入图片描述

一个子类sub
在这里插入图片描述

如果想要访问private,则需要父类提供一个public方法
在这里插入图片描述
然后在子类中调用它
在这里插入图片描述
我们在main方法中测试一下
在这里插入图片描述

如果我们想要使用private方法,则可以在父类中定义一个public方法去调用它
在这里插入图片描述
然后在子类中调用
在这里插入图片描述
此时我们再运行main,发现此时test400被运行了
在这里插入图片描述

2.继承使用细节2

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原因:子类中有默认的super(); 会调用父类的无参构造器
在这里插入图片描述

在这里插入图片描述

验证第一句话
在这里插入图片描述
在这里插入图片描述

验证第二句话
此时我们在父类base设置了一个有参构造器,则我们默认的无参构造器就没有了
在这里插入图片描述
此时我们的子类sub中就会报错
在这里插入图片描述
此时我们必须加一个super(“smith”,10);
Super(“tom”,30);来指定一下
在这里插入图片描述
此时在main中调用
在这里插入图片描述

3.继承使用细节3

在这里插入图片描述

现在我们父类base中有三个构造器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果我们子类sub中什么也不写
在这里插入图片描述
则结果一样
在这里插入图片描述
如果我们调用父类中带一个参数的构造器
比如调用public Base(String name)这个
在这里插入图片描述
则我们在子类sub中要输入super(“hsp”);
在这里插入图片描述
此时main中的结果为
在这里插入图片描述

同理,如果要调用带两个参数的构造器
则在子类sub中输入super(“king”,20);即可
在这里插入图片描述

此时输出的结果为
在这里插入图片描述

在这里插入图片描述
看this细节那一个章节
在这里插入图片描述

4.继承使用细节4

在这里插入图片描述
第七条
在这里插入图片描述
在这里插入图片描述

第八条
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.继承本质详解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果其中的age变成private属性
这边son是father的子类,所有可以直接使用getAge方法
在这里插入图片描述
在这里插入图片描述

6.继承课堂练习

在这里插入图片描述
Class B中
无参构造器因为有一个this,所以没有super();
有一个参数的构造器有一个super();会调用父类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

父类Computer
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

子类pc
(另一个子类notepad就不写了)
在这里插入图片描述
在这里插入图片描述

注意。上面的this不是调用构造器的this
所以与super可以共存
在这里插入图片描述

主方法main
在这里插入图片描述

6.super关键字

1.super基本语法

在这里插入图片描述

父类A类
在这里插入图片描述
在这里插入图片描述

其实在这里不加super也可以调用父类A中的属性和方法
在这里插入图片描述
在这里插入图片描述

2.super使用细节

在这里插入图片描述
查找方法
在这里插入图片描述

查找属性
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.super和this比较

在这里插入图片描述
在这里插入图片描述

7.方法的重写/覆盖

1.介绍

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.细节

在这里插入图片描述

第二条;String是object的子类,所以仍然可以构成重写
但如果反过来就会报错
比如方法m2在子类Dog用object,父类Animal用string就会报错
在这里插入图片描述
在这里插入图片描述

第三条
比如父类的eat方法为protected,子类方法为public,就能成功运行
在这里插入图片描述
在这里插入图片描述

3.课堂练习

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.多态

1.养宠物引出多态

在这里插入图片描述
在这里插入图片描述

Food类
在这里插入图片描述

Fish类
在这里插入图片描述

Bone类
在这里插入图片描述

Animal类
在这里插入图片描述

Cat类
在这里插入图片描述

Dog类
在这里插入图片描述

Master类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Poly类(main方法)
在这里插入图片描述

2.方法的多态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.对象的多态

可以把一个子类对象赋给一个父类的对象引用
也就是说我可以用一个父类的引用指向一个子类的对象
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.多态的快速入门

在这里插入图片描述
在这里插入图片描述

Dog与Cat是animal的子类,故可以运行成功
在这里插入图片描述

5.向上转型

在这里插入图片描述
父类Animal
在这里插入图片描述
在这里插入图片描述

子类Cat
在这里插入图片描述

Main
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.向下转型

在这里插入图片描述
下图中运用向上转型的过程无法调用cat中的catchMouse方法,所以要用到向下转型
在这里插入图片描述
Dog dog = (Dog) animal 会报错,不可以
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.属性重写问题(instanceof)

在这里插入图片描述
第一条
在这边属性和方法的不一样,属性这边直接看编译类型
下面base的编译类型为Base,故结果为10
(这个当做一个结论记住)
在这里插入图片描述
下面的sub的编译类型为Sub,故结果为20
在这里插入图片描述
第二条
在这里插入图片描述
在这里插入图片描述
下面的结果为false和true
注释掉的那一行编译不会通过
在这里插入图片描述

8.多态课堂练习

在这里插入图片描述
在这里插入图片描述
第一个:s.count是访问属性,看编译类型,故输出20
第二个:s.display()是查找关系,要从运行查找关系开始,这边的运行类型就是sub,故为20
第三个:b == s判断,比较的是地址,b与s指向的是同一个sub
第四个:b.count是访问属性,看编译类型,它的编译类型是Base
第五个:b.display()是查找关系,要从运行查找关系开始,他的运行类型是sub,故为20

在这里插入图片描述

9.动态绑定机制

在这里插入图片描述
在这里插入图片描述
当将32-34行注销之后
a.sum()会运行父类A中的a.sum()方法,
根据动态绑定机制,这里的getI()调用的是子类的gerI(),
所以说上面的输出a.sum()的结果变为30
在这里插入图片描述
在这里插入图片描述

当将40-42行也注销之后,再调用a.sum1()
由于属性没有动态绑定机制,所以sum1中的i在当前的类A中进行查找为10
a.sum1()的结果就为20
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.多态数组(多态应用)

在这里插入图片描述

父类person
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

子类student
在这里插入图片描述
在这里插入图片描述

子类teacher
在这里插入图片描述
在这里插入图片描述

main方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先在teacher中加一个特有的方法teach
在这里插入图片描述
再在student中加一个特有方法study
在这里插入图片描述
我们发现无法通过person[i]调用它们的特有方法teach和study,因为person[i]的编译类型为Person类,而Person类是没有这两个方法的,编译通过不了

在这里插入图片描述
通过以下方法解决

在这里插入图片描述

11.多态参数(多态应用)

在这里插入图片描述

Employee类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

worker类
在这里插入图片描述

Manager类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值