栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面向对象程序设计-JAVA-学习笔记(翁恺面向对象课程)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面向对象程序设计-JAVA-学习笔记(翁恺面向对象课程)

-------------用类制造对象----------------
1.对象与类的关系可以简单理解为:
类相当于是自己写的一个函数(具有函数的功能,但其实不是函数,这里为方便理解),等于你创建了一种新类型,而对象则是在其他函数中为这个类型的一个变量。
比如我写了个sum(int a,int b)函数,这个函数的创建,称之为创建了一个类,而在主函数中我引用了它,比如int c=sum(10,20),int d=sum(20,30),则表示我创建了两个对象。
---------------定义类-----------------------
1.比如定义了一个能走路功能的类walk,其中又细化了其中的步骤,迈左腿,迈右腿,左腿向前移动几米,右腿向前几米
public clss Walk{
left{
}
moveleft{
}
right{
}
moveright{
}
}
之后在主函数中创建对象
Walk robot1=new Walk();------这里就是创建了两个不同的对象-------
Walk robot2=new Walk();
robot.moveleft-----之后根据类中写的不同的功能,通过在对象后面加“.”这个运算符来调用其中的功能
------------成员变量和成员参数-----------------
1.this关键词

如果没有this关键词,第九行写成moveLeft=moveLeft显然是错的。
-------------对象初始化--------------
1.类中定义的变量可以不用赋初始值,系统会自动生成一般为0或null,而在主函数中的变量如果不赋初始值就使用的话会报错。
2.构造函数(这是一个新名词)
之前提到把类当作函数来看,不准确,现在我们在类中创建一个与其同名的函数,而这个函数不加任何返回类型(void也不需要),比如
public class Walk{
Walk(){
}
Walk(int a,int b){//这里的两个Walk之间的关系称之为“重构”
}
}
这里的两个Walk分别是无参数构造函数和有参数构造函数,即便我们不写构造函数,系统也会默认有无参构造函数,而构造函数的作用就是:对象初始化。比如之前我们创建一个对象Walk robot=new Walk();其实new后面的这个就是无参构造函数,如果我们人为在类中创建了有参构造函数,就可以自己初始化对象了。
---------------封闭的访问属性(private)-----------------
可以在类里定义变量的时候在前面加上"private"属性,表示这个变量是"私有的",即这个变量只能在这个类中被访问,在其他类中是看不到这个变量的。
这里注意的是,private是针对类而言的,就是说,即便是两个不同的对象,但如果他们都属于同一个类,还是可以互相访问的。“private"属性可以很好的防止在程序使用过程中,某些重要的变量被不小心更改。
---------------开放的访问属性(public)-------------------
可以在类里定义变量的时候在前面加上"public"属性,表示这个变量是"公共的”,这个变量可以在其他类中被访问。如果不加public也不加private,表示这个变量或函数(方法)只能在它所附属的那个"包"中的所有"类"中所访问,不能出了这个"包"。
这里说下一个“java工程”(java project)由一个或多个“包”(package)组成(一个“包”中还可以包含更小的“包”,现在可以忽略这个),而一个“包”由一个或多个“类”(class)所组成,而“类”里放的则是我们的代码。
还有就是下面这个图片=

-----------类变量----------------
1.static属性

----------------类函数----------------------

-----------------泛型容器类---------------------
1.动态数组—(容器)
有时我们需要让用户每输入一个数字,数组中就产生一个相应的空间,只要计算机中还有空间,数组就会自动分配空间,这时候就需要引入一个新的内容–容器。
下面介绍容器类的一种
/ArrayList是容器的类型名/ArrayList<元素的类型> 变量名 = new ArrayList<类型>();
这个容器中有自己已经写好的功能,比如

notes.add(s)是把s这个元素放入notes这个容器(动态数组)中,
notes.size()是返回notes这个容器中有多少个元素。
notes.get();是返回notes容器中的第几号元素
notes.add(int location,string s)是把s元素放到位置为location的地方,原来的元素会被挤到location+1的位置去
notes.remove(int index)是把位置为index的元素删去
notes.toArray(a)是把notes里面存放的所有元素放到数组a中,a是自己定义的数组
----------对象数组--------------
1.int数组和String数组是不同的,int数组中存放的是每个int的数据。
而String数组中存放的却不是每个每个String的数据,其存放的是每个管理String数据的管理者


2.
输出结果

-----------集合容器(set)-------------------
1.HashSet类容器,可以把相同的元素和并,就像集合一样,合并之后,前面的元素会消失,输出顺序是取决于后面那个相同的元素
2.容器类的变量可以直接输出

这张图的输出结果是[second,first];
而像普通的字符串数组,定义的类对象,则不能直接输出。

在这里我们本想输出s的值5
但是输出结果却是

想要输出5,需要加上

这个的意思是将i转换成字符串进行输出,如果这个类中有多个变量,可以改变i,替换为其他想通过System.out.println(s)来输出的值。这也算是中快捷方法了。可想而知,系统自带的容器类的函数也一定有这个语句,才能让我们直接输出。
--------------Hash表--------------------
这个知识其实还是认识一个新的容器—HashMap。
大致就是说当我需要有种一一对应的关系时,比如说一美分可以说成"penny",10美分可以说成“dime”,当我们说出一的时候,程序自动输出它的对应值penny,虽然可以用switch语句来写,但是这里讲一个更便捷的方法,HashMap。

这里如果输入的是没有对应的数字,会显示null。
也可以自己做调整

继续


这里的for each遍历和老师所显示的内容不同,感觉这个遍历顺序难道是随机的?(俺也不知道,先记下)
-----------kkk---------------------
补一下之前的东西先,
两个相同函数名中有着不同的参数,这样叫做函数的重载。

---------------资料库的故事---------------
讲一个快捷键,系统自动帮我们初始化变量的快捷键。

准备好这些我们要初始化的变量。

如图所示,点击。。。。。。Fields那个

选择我们想要初始化的变量,选择的打勾。
点击generate

创建完毕
------------------------★继承------------------------
面向对象程序设计语言有三大特性:封装、继承和多态性。从现在开始,就到了真正重要且难理解的部分了。
继承是什么呢?假如你是一个房屋设计师,要给众多的客人设计房屋,顾客1说要一个单人房,于是你立刻简单画了一个三室一厅的图纸,之后根据他的要求对其进行了细化,完成。之后又来了顾客2,3,4,他们的要求和1一样,现在,难道你要再画三张三室一厅的图纸吗?你只需要把最初的那份模板拿出来,再增删改就可以了。
而继承,就是把许多相似的类的共同部分提取出来,做成一个模板类型的“父类”,而提取完后的每个类则为“子类”,“子类”继承“父类”,这就是继承。



现在大致是说,我在第一张图片CD类中加了“extend”属性,使它成为了Item的子类,它自己拥有一个输出自己的函数。(只需要关注开头的“extend”和结尾的print函数就行)
第二张图片和第一张大致内容差不多,只不过是DVD,它也继承父类
第三张图片是父类Item的内容,只有一个print函数,输出kkk
第二张图片的database是我们要输出的地方,它拥有自己的输出函数,而它的输出函数则是通过调用item的输出函数进行输出的。
现在我们进行输出,输出结果如下:

我们发现输出结果没有输出kkk,而是输出了Item的子类DVD和CD的东西,
当我们把DVD和CD中的print函数删掉之后


输出结果为:

就是说:当我们调用父类的输出函数时,java是先找它的子类,如果子类有输出函数,则先进行子类函数的输出,否则再进行父类函数的输出,这里注意的是父类必须有print函数,可以不加任何内容,但不可以没有。
-----------------子类继承了什么--------------------
子类可以继承父类的变量,但是当父类的变量属性为private时,就不可使用了,你虽然继承但是没有使用权。这个时候,若是把private属性改成public属性,这会对我们程序的安全性造成影响。
我们可以把private改成protected属性,它的意思是当子类和父类位于同一个包中,父类加这个属性的变量只有子类可以使用。但是吧,这仍然不太好,因为当子类和父类不在同一个包中的时候,就出错了。
现在,为了简化代码,我们先把cd中的变量title放入item中

可以发现CD中出现错误

这就是说我们上面说到的问题,由于Item中title变量是private的,CD类中无法使用那个title,也就无法完成tilte的初始化。
做如下改动


首先把CD类中的title放入super中,把他传入到父类。之后再由父类进行它的初始化。这里super必须存在且里面要放入要传的title。
这里的super其实是要继承父类的构造方法,父类的构造方法中需要一个string类型的变量,所有Item就需要给他一个这个类型的变量。
所以说,另一个类DVD就出错了

DVD出错是因为super是要继承父类Item的构造方法,而最初我们没再Item中写构造方法时,系统默认有一个无参的构造方法,而现在我们写了一个有参的构造方法,我们则需再补一个无参的,像这样

加上之后,DVD中的super()就可有可无了,因为即便删去,DVD也会主动先去找父类的那个无参的构造器。现在虽然在父类中有两个构造方法,但子类只能选择一个,即只能存在一个super()。
这里说一下,初始化时,首先是父类,父类初始化结束后,再轮到子类初始化自己的,这个顺序是不变的。也就是说super()在子类初始化时,必须为第一行
现在返回DVD类

我们发现,DVD中和Item中都有相同的变量title,都进行了初始化,但没报错。而这种情况是因为现在程序中有了两个title,一个是自己的,一个是父类的。
现在我们把父类中加上一个初始化的函数

在DVD中加上这个函数

则经过这一番调整之后,现在DVD中的title变量经过主函数变为了“A”,而父类中的title则为“b”,DVD中现在同时存在两个不一样的title,而如果进行输出的话,就又到了上面说到的,如果DVD中有自己的输出函数,则输出自己的title,没有,则调用父类的输出函数,输出父类的title。而现在,我们也找到了另一种访问父类private属性变量的方法,就是调用父类的函数(前提是public)。
现在又又又来问题了,如果我想在子类中输出父类的东西,就比如说我想在DVD中的print()函数中输出父类的title,那怎么办呢?
首先是在父类中写好输出父类自己的title函数

然后,在DVD中

这样写,而不能单纯的写成print();不然就成死循环了,虽然现在我感觉也有点套娃= =
------------------------------子类和子类型------------------------
就是说可以把子类的变量赋给父类,下面这里item[0]和[1]是CD类,而[2]号位是DVD类型的。

---------------------多态变量----------------------
比如说在刚才add函数定义Item类型的变量item时,这个变量我们就称其为“静态变量”,它的类型时Item,而当我们程序运行的时候,我们赋给add的是一个DVD或这CD类型的,不是Item类型的变量,这时候item就不再是Item类,而是DVD或CD类,这时我们就称之为动态变量。
----------------向上造型-----------------------------
1.把一个类型的对象赋给另一个类型的变量的过程称之为“造型”
现在我们首先分别创建了一个父类型和子类型的变量,然后把子类型的变量交给了父类型,然后我们又定义了一个子类型的变量,想把父类型的变量交给子类型,然而单单写成CD cc = item;(36行代码)这样,编译器不会答应。而如果我们加上强制类型转换,编译器则也只能勉强接受,但不会承担风险,= =,说人话就是,如果此时父类存放的那个东西能被强制转换就能运行,否则只会在程序运行之后才报错。

2.现在有一个String的变量a,a=“aaa”;
之后又做了a=“bbb”;这里不是对a的值进行了修改,而是改变了a的管理对象,因为java中没有对对象值修改这么一说,c++可以。所以说现在a的id也发生了变化。
3.造型和类型转换不一样,类型转换之后,比如int a=(int)10.2;之后,10.2就不存在了,a的值是10,而造型则依旧是原来的类型,只不过换了方式来看待。向上造型则是把子类对象赋给父类变量的过程。父亲嘛,总要在儿子之上嘛。还有向上造型是安全的,与之对应的向下造型则需要考虑类型是否匹配之类的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号