| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 面向对象编程基本部分——java三大特性详解 -> 正文阅读 |
|
[Java知识库]面向对象编程基本部分——java三大特性详解 |
本文是基于楼主学习韩顺平老师java课后的笔记整理而来?分享出来?希望能跟大家一起交流?共同进步~?为了秋招? 冲冲冲!??绪论java有一个重要的特性是面向对象(oop) 这是它与其他语言重要的差别之一? 也是它如此受市场欢迎的重要原因? 本文我们就来简单说说?封装继承多态这三大面向对象重要特征? 封装一 封装是什么简而言之,封装就是把抽象出来的数据【属性】和对数据的操作【方法】封装在一起 数据被保护在内部 程序的其他部分只有通过被授权的方法 才能对数据进行操作 类似电视机?中我们只能用遥控器控制声音大小?亮度增减?但是并不知道它内部是怎么实现的? 也不用知道? 这点就可以看出面向对象的好处了? 不同于c面向过程注重功能的具体实现? java拥有非常强大的类库?大大提高了程序员的创造力? 不用再费很多心思去造轮子? ?更多的是分析需求?直接调用方法即可? 毕竟语言和框架只是一种工具罢了? 功能的实现才是最重要的 二 为什么需要封装封装可以隐藏实现细节 方法 调用 因为不知道类里面是怎么实现的?我们只需要调动即可?做到了一定程度的封闭安全性 封装可以对数据进行验证 保证安全合理 比如?对名字进行初始化?规定名字字数不能超过六个字? 我们可以在内部进行规定 三 怎么封装第一步将属性进行私有化private 保证封装安全性 第二步提供一个公共的set方法 用于对属性判断并赋值 对对象进行赋值 第三步提供一个公共的get方法用来获取属性的值 四 example创建程序 在其中定义两个类 Account和AccountTest类体会java的封装性 1.Account类必须具有属性 姓名(长度为2 3 4位) 余额(必须大于20) 密码(必须是六位) 如果不满足 则给出提示信息 并给出默认值 2.通过setxx的方法给Account的属性赋值 3.在AccountTest中测试
五 细节访问修饰符?分为四大类?public?默认? protected?private 对方法和属性进行操作时?要遵循访问修饰符的访问范围 六 总结?封装是面向对象的基础? ?大家只要知道封装是将一个类的方法和属性都封装在一起就可以了?不用 继承一 继承是什么?继承是指?当多个类存在相同的属性时 可以从这些类中抽象出父类 在父类中定义这些相同的属性和方法 所有的子类不需要重新定义这些属性和方法 只需要通过extends来声明继承父类即可? 二 为什么要使用继承?我们编写了两个类 一个小学生类 一个研究生类 两个类的属性和方法有很多是相同的?比如说?小学生有名字?初中生也有名字?小学生要学习?初中生也要学习? 怎么办 ?如果在两个类中分别写它们共有的方法和属性??则重复代码太多?过于冗余?所以我们可以使用一个父类?写一遍?然后子类继承只需要写子类特有的方法和属性即可?大大提高了代码的复用性和整洁度 三 继承的使用方法class 子类 extends 父类{ //extends关键字 } 四 example父类 Student.java
子类 Pupil.java
子类 Graduate.java
五 继承的注意事项一 子类继承了父类所有的属性和方法 但是私有属性不能在子类直接访问 非私有属性可以直接访问 要通过(父类提供)公共的方法(get set?方法)去访问 二 子类必须调用父类的构造器完成父类的初始化 三 当创建子类对象时 不管使用子类的哪个构造器 默认情况下总会去调用父类的无参构造器 如果父类没有提供无参构造器 则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作 否则编译不会通过 四 如果希望指定去调用父类的某个构造器 则显式的调用一下 super(参数列表) 五 super在使用的时候 必须放在构造器第一行
六 子类最多只能继承一个父类(直接继承) java是单继承机制? 但可以用接口实现多继承 六 继承的本质探究
?本质上我们来看?继承即是一种查找?从子类开始向上查找?直到Object类?查找它的属性和方法 ? 方法的重载和重写重载 方法重载(Overloading):在一个类中,如果两个方法的方法名和相同,参数列表不同,那么这个方法就被定义为方法重载。
重写方法重写:子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。 ?
注意重写中?父类的参数列表和子类中的参数列表?和父类中的返回类型和子类中的返回类型必须一样?否则不构成重写?构成重载? 并且子类的访问修饰符范围不能比父类的访问修饰符范围更小 多态一 多态是什么?方法或者对象具有多种状态 是面向对象的第三大特征 多态是建立在封装和继承的基础上的 对方法:方法的重载体现多态?很好理解?你输入的参数不同?自然调用的方法不同 ????????????????方法的重写依然体现多态? ?不同的对象调用就会产生不同的效果 对对象:一个对象的编译类型和运行类型可以不一样? 编译类型在定义时?就确定了?不能再改变 运行类型可以改变? 编译类型看等号的左边?运行类型看等号的右边
二 多态的两种实现方式前提:两个对象(类)存在继承关系 向上转型1.本质:父类的引用指向了子类的对象 2.语法:父类类型 引用名 = new 子类类型(); 3.特点:编译类型看左边 运行类型看右边 可以调用父类中的所有成员(需遵守访问权限) 不能调用子类中特有成员 最终运行效果看子类的具体实现 编译阶段能调用哪些成员是由编译类型来决定的
当向上转型之后,父类引用变量可以访问子类中属于父类的属性和方法,但是不能访问子类独有的属性和方法。 向下转型并不是所有的对象都可以向下转型,只有当这个对象原本就是子类对象通过向上转型得到的时候才能够成功转型。
语法 子类类型 引用名 = (子类类型) 父类引用 只能强转父类的引用 不能强转 父类的对象 可以调用子类类型中所有的成员 三 多态的细节属性没有重写之说 属性的值看编译类型
看等号左边?左边的类中count是多少就是多少 instanceof比较操作符 判断对象运行类型是否为类的子类或者是否为该类父类的类型
访问属性 看编译类型 访问方法 看运行类型 四 多态数组数组的定义类型为父类类型 里面保存的实际元素类型为子类类型?可以依据不同的运行类型调用不同的方法 应用案例 现有一个继承结构 要求创建一个Person对象 2个Student对象和2个Teacher对象 统一放在数组中 并调用say方法?? 父类 人类
?子类学生类
子类教师类
主方法
结语大二了?也二十岁了? 不是似懂非懂的少年了?也该为自己的未来做准备了?承担一些自己应该担当的责任了? ?不然呢?等到毕业找不到工作再努力吗? 回家靠爸妈养着?前几天看到一个大佬拿了阿里的offer?对就是路飞学长?非常羡慕?看了他的文章?觉得这一路走来学长非常的努力和不容易? 十分钦佩?每个人都是从小白过来的?他们可以我相信我也可以 希望我自己能够见贤思齐? 认真备战? 争取能在毕业前交上属于自己的满意答卷? 全力以赴?不留遗憾。? 努力?为了自己想要的生活! 数据结构+java技术栈+力扣刷题 第一篇博客写的不是特别好?见谅?以后会不断进步的? 求大佬们三连!? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 18:46:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |