Java 面向对象编程OOP的三大特点

感谢:bilibli主播 —— 狂神说Java
这个博主的教学视频十分良心!超级赞!全栈Java的学习指导!
链接:https://space.bilibili.com/95256449/video
本博客是本人观看 狂神说Java 的Java课程所做的笔记


OOP特点 重点

1)封装性

追求高内聚,低耦合

耦合就是元素与元素之间的连接,感知和依赖量度。这里说的元素即是功能,对象,系统,子系统。模块。

内聚更为专业的说法叫做功能内聚,是对系统中元素职责的相关性和集中度的量度。

简单的说就是高内聚就是类的内部数据操作由自己操作完成,低耦合就是尽量暴露少量的方法给外部使用。

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

记住一句话:属性私有,get/set

意义

  1. 通过 get/set方法 对属性进行封装,在 get/set方法 中可以对数据进行检验,通过才可以赋值或者被获取,这样可以使内部数据更安全,避免破坏系统。
  2. 提高程序安全性,保护数据
  3. 隐藏代码的实现细节
  4. 统一接口
  5. 增加系统可维护性

2)继承性

关键字:extends

Java中类只有单继承,没有多继承

继承是类和类之间的关系。继承关系的两个类,一个为子类(派生类),一个为父类(基类)。

一个类默认会继承Object类。IDEA可通过Ctrl+H查看继承关系。

类不能被继承的情况

  1. 如果类被final修饰,那么此类不可以被继承;
  2. 如果类中只有private的构造方法,那么此类不可以被继承。

原因

(1)一个类一定会有构造函数,如果不写,那就是默认的无参构造函数,如果写,就只有所写的构造函数。
(2)子类的构造函数一定会调用父类的构造函数,但是如果父类中只有私有的构造方法,那么子类就无法调用父类,就会有问题。

super详解 关于super的重点

在这里插入图片描述
当new了子类的无参构造方法,那么系统会先执行super();调用父类默认的无参构造方法(不管有没有super();这句话,有则去执行,无则系统默认添加该语句去执行),然后才会执行子类的构造方法。

super注意点:

  1. super调用父类的构造方法,必须在子类构造方法的第一个;
  2. super必须只能出现在子类的方法或者构造方法中;
  3. super和this不能同时调用构造方法;
  4. this(); 调用本类的构造方法、 super(); 调用父类的构造方法。

方法重写

重写都是方法的重写,与属性无关。

需要有继承关系,子类重写父类的方法!

  • 方法名必须相同
  • 参数列表必须相同
  • 修饰符(范围可以扩大但不能缩小):public > protected > default > private
  • 抛出异常(范围可以缩小但不能扩大)

重写,子类的方法必须和父类的方法一致,就是重新给这个方法赋予新的功能,即方法体不同!

意义

  1. 父类的功能,子类不一定需要,或者不一定满足,这样就可以重写来满足子类的需求;

IDEA快捷键:Alt+insert 选择Override

3)多态性 面试高频问题

重点理解多态性

多态就是用基类的引用指向子类的对象。

比如有一个父类superClass,它有2个子类subClass1,subClass2。superClass有一个方法 func(),两个子类都重写了这个方法。那么我们可以定义一个superClass的引用obj,让它指向一个子类的对象,比如superClass obj = new subClass1();那么我们调用obj.func()方法时候,会进行动态绑定,也就是obj它的实际类型的func()方法,即subClass1的func()方法。同样你写superClass obj = new subClass2();obj.func()其实调用的是subClass2的func()方法。这种由于子类重写父类方法,然后用父类引用指向子类对象,调用方法时候会进行动态绑定,这就是多态。多态对程序的扩展具有非常大的作用,比如你要再有一个subClass3,你需要改动的东西会少很多。

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名重写方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

【个人理解】父类可以写很多方法,子类继承父类,然后对父类的方法进行重写,满足子类的需求,然后在使用时,父类引用指向子类对象Person person = new Student();,那么很简单的就可以直接调用父类的方法,展现了子类对象的重写的具体方法。

instanceof

判断一个对象类型(有无父子或继承关系)

在这里插入图片描述

如果有继承关系,那么可以进行类型的转换,进行类型转换之后就可以使用那个类自己的方法。

在这里插入图片描述

如图,obj进行强制类型转换成Student类型之后,就可以使用它本身自己的方法了。

注意

  • 向上转型:子类转为父类,可能会丢失自己本来的一些方法。
  • 向下转型:父类转为子类,强制转换。
  • 转型是为了方便方法的调用,减少重复代码,有效提高利用率,简洁性。

视频学习资源 (狂神说Java)
Java零基础学习视频(通俗易懂)【持续更新】

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值