目录
一、前言
本篇博文是对Java 面向对象的一个全面总结,同时也囊括了我们"面向对象"专题的几乎全部内容。屏幕前的你一定或多或少地听说过面向对象三大特性——封装,继承,多态。诚然,能否掌握这三大特性,直接决定了能否正确理解和运用面向对象思想。但是,不止如此,面向对象思想是浩瀚的,是惊奇的,是美妙的。只有保持虚心,不断练习,我们才能越来越深刻地理解她的伟大。
本篇博文将会从面向对象的介绍,类与对象,成员变量和局部变量,面向对象三大特性这四个大的方面同大家娓娓而谈。当然,重点肯定是oop三大特性了。对于面向对象介绍中的一些概念,大家了解即可,不需要背。这一章内容非常全面,尤其是oop三大特性部分,up投入最大,相信大家看完后一定收获不小。注意 : ①代码中的注释也很重要。②点击目录或者侧边栏可以跳转。良工不示人以朴,所有文章都会适时改进。感谢阅读!
二、面向对象程序设计介绍
1.oop三大特性 :
在说oop三大特征之前,大家先要知道——什么是oop?
“oop”是面向对象程序设计(Object Oriented Programming)的简称。
oop三大特性分别为——封装,继承,多态。其中,封装是实现继承的前提,继承是实现多态的前提。这三大特性之间一环扣一环,因此,如果想学好面向对象三大特性,就必须把每一个特性都扎实的掌握。
2.面向对象和面向过程的区别 :
面向过程思想就是把关注点放在一件事或者一个活动中涉及到的步骤(也就是过程)上的思维方式。比如我们接触编程的入坑作——C语言。C是一门典型的面向过程的语言,当我们要用C来解决或者描述一件事情的时候,我们需要弄清楚事情的来龙去脉,列出实现目标需要的每个具体步骤,然后按部就班的一个接一个实现步骤。就是说,我们是作为执行者从事情发展的角度来进行编程的。
面向对象思想就是把关注点放在一件事或者一个活动中涉及到的人或事物(也就是对象)上的思维方法。比如我们正在学习的java。java是一门典型的面向对象的语言,当我们要用java来描述或者解决一件事情的时候,我们不再需要关注完成这件事情所需的具体步骤,而是关注在这件事情中出现了几个对象,这些个对象分别参与了哪些行为。我们只需要将这些行为以编程的方式实现即可。就是说,我们是作为指挥者从人事管理的角度来进行编程的。
面向过程程序设计性能更高,但是面向对象程序设计更易拓展和维护程序。
3.面向对象思想特点 :
与面向过程相比,面向对象更符合人们的思考习惯;面向对象可以把复杂的事情变得简单化;面向对象让人们从执行者变为了指挥者。
4.面向对象的程序开发 :
面向对象编程的设计开发,就是不断地找对象,使用对象,指挥对象做事情的一个过程。
三、Java——类与对象
1.java中如何描述一个事物?
在java中,我们通过创建“类”来描述事物,类主要由属性和行为构成。比方说,我们可以创建一个Animal类来模拟世界上所有的动物。动物有哪些属性呢?物种名,栖息地,平均寿命等;动物有哪些行为呢?吃喝拉撒等。
2.什么是类?
类,即“归类,分类”。类是一系列具有相同属性和行为的事物的统称。
类用来模拟现实事物。比如,用来模拟手机的Phone类——
属性 : 品牌,型号,价格,发售日期等等;
行为 : 打电话,发短信,打游戏,看网课等等;
3.类的五大成员:
类的五大成员分别是属性,方法,构造器,代码块,内部类。
(除去内部类外,其他四大成员均在这篇博文中讲到;内部类考虑到使用频率和难度问题,up将其放在了“java 进阶”专栏。)
4.封装的前提——抽象 :
抽象就是把一系列相关事物共同的属性和行为提取出来的过程。比如我们上面提到的Animal类和Phone类的例子。
5.什么是对象 :
某一类事物的某个具体存在,即某一类事物的一个具体实例。
6.类和对象的关系 :
类 : 属性和行为的集合体,是一个抽象概念。(类用来模拟一类事物)
对象 : 是某一类食物的具体体现,是一个具体存在。
eg1 :
狗——类。世界上的狗有千千万只,不知道指的是哪一只狗,因此单说“狗”指的是一个抽象概念。
楼下阿姨养的那只宠物狗——对象。“楼下阿姨养的那只宠物狗”是千千万狗中的指定的一只狗,是具体的。
eg2 :
手机——类
任正非手中的华为手机——对象
7.java中如何定义一个类 :
java中定义类的过程,就是把一系列相关事物共同的属性和行为抽取出来的过程。其实就是我们上文提到的“抽象”。
PS : 类中的属性既可以是基本类型,也可以是引用类型。
8.创建对象的格式 :
类名 对象名 = new 类名();
①new是Java中用于创建对象的关键字。
②此处的“对象名”即一个指向堆空间中真正对象的引用变量。(即C中的指针,在Java中叫做引用)
③“类名()” 即真正的对象,在堆空间中。
④创建某一个类的对象,也称为“实例化该类”,在实例化类之前,会先将要实例化的类的字节码文件加载到方法区(仅1次)。
9.如何使用一个对象 :
对象名.变量名
对象名.方法名(形参列表)
演示 :
packageknowledge.oop.preface; /** 定义了一个手机类 */publicclassPhone { //手机的属性Stringbrand="Huawei"; doubleprice=13499; //手机的行为publicvoidcall() { System.out.println("打电话📞~"); } } classTest { publicstaticvoidmain(String[] args) { //创建Phone类对象Phonephone=newPhone(); //调用Phone类属性System.out.println("Phone's brand = "+phone.brand); System.out.println("Phone's price = "+phone.price); //调用Phone类行为phone.call(); } }
输出结果 :
10.关于匿名对象 :
匿名对象指没有用任何引用做接收的对象。
//eg : newPhone().call();
①由于new关键字的存在,匿名对象是确确实实在堆空间中存在的。
②匿名对象仅能使用一次,因为没有引用指向它,使用后它的内存权限会被收回,不能再使用。
四、Java——成员变量和局部变量
1.关于成员位置和局部位置 :
成员位置 :
类中,方法外。
局部位置 :
方法的参数列表或者方法体语句。代码块中。
如下 :
publicclassDemo { Stringname; //成员位置publicvoidshowName() { Stringname="nb"; //局部位置System.out.println("name = "+name); } }
2.成员变量和局部变量的区别 :
①定义位置 :
如上所示——成员变量定义在成员位置;局部变量定义在局部位置。
②初始化 :
成员变量 : 有默认的初始化值(我们在数组专题已经讲过),定义时可以不赋初值,可以正常调用。
局部变量 : 无默认的初始化值,定义时可以不赋初值,但必须先赋值再使用。
如果局部变量定义时未赋初值就使用,IDEA会报错,如下图所示 :
③作用域 :
成员变量: 作用域为整个类;
局部变量 : 作用域为定义它的代码块或者方法体中;
PS :① 成员变量和局部变量可以重名,但在同一作用域中,两个变量不能重名。即两个成员变量或者两个局部变量是不可以重名的,否则报错。
② 当出现成员变量和局部变量重名的情况时,我们称为“强龙不压地头蛇”布局定式,遵循就近原则。
④jvm内存 :
成员变量: 存在于堆内存中;
局部变量 : 存在于栈内存中;
⑤修饰符 :
成员变量: 可以加修饰符
局部变量 : 不可以加修饰符;
⑥生命周期 :
成员变量: 生命周期较长——随着对象的创建而存在,随着对象的消失而消失。
局部变量 : 生命周期较短——随着方法的调用而存在,随着方法的调用完毕而消失。
五、oop三大特性——封装篇(两万余字)
链接如下 :
https://blog.csdn.net/TYRA9/article/details/128429036
封装篇主要内容包括 :
①封装的引入和介绍
②private关键字
③this关键字
④构造器详解
⑤标准代码JavaBean
六、oop三大特性——继承篇(四万余字)
链接如下 :
https://blog.csdn.net/TYRA9/article/details/128523078
继承篇主要内容包括 :
①继承的引入和介绍
②继承关系中成员变量的使用
③继承关系中成员方法的使用
④继承关系中构造方法的使用
⑤继承的特点和本质
⑥方法重写和Java四大访问权限修饰符
七、oop三大特性——多态篇(十万余字)
链接如下 :
https://blog.csdn.net/TYRA9/article/details/128745582
继承篇主要内容包括 :
①多态的引入和介绍
②多态的具体使用
③多态的优缺点
④类型转换
⑤Java动态绑定机制
⑥多态的应用
⑦抽象类
⑧final关键字 和 static关键字
⑨接口
⑩Debug断点调试
八、面向对象总结
再次回顾我们的面向对象专题。我们以抽象来引出了类的定义;而将抽象出来的东西封闭到一个类中,就是封装;让封装好的两个类之间产生父子关系,就是继承;在产生父子类关系的基础上,父类引用指向子类对象,就是多态。所以说,抽象是封装的前提,封装是继承的前提,继承是多态的前提。说是三大特性,其实一环扣一环,谁也离不开谁。
🆗,以上就是面向对象专题的全部内容了。面向对象是java基础中相当有分量的一部分,大家一定要认真对待。整个专题的内容非常丰富,基本涵盖了面向对象所有的知识点,但是字数上略显冗余。如果大家有好的建议和想法,或者对文章的纠错,可以在评论区和up交流。感谢阅读!