Java封装&继承&抽象类

Java封装&继承&抽象类

1.封装

1.1为什么

目前,我们可以对属性任意赋值,有些值不符合我们的实际需求。为了不允许随意直接操作属性,

Java中,提供了一种机制:封装。就跟你生活中的包装类似。

好处:将属性保护起来,提高安全性

1.2是什么
  1. 封装是面向对象三大特征之一,四个[抽象]

  2. 将属性隐藏起来,即不允许在外部【其他类中,直接操作】,通过方法去赋值,同时可以在方

    法中加入我们的判断逻辑。

1.3怎么用
  1. 属性私有,使用关键字 private 修饰

  2. 通过公共的【 public 修饰的】方法,进行属性的取值【 getXxx 】和赋值【 setXxx 】操作,以及

    如果需要加入逻辑判断,在公共方法中加入。

使用IDEA工具直接生成 getXxx 和 setXxx 方法

代码编辑区 —》 右键 —》 generate

2.包

2.1为什么要用

对比windows下文件管理的方式,就看成是文件夹

  1. 可以将代码分门别类进行有组织的管理; —》 常用

  2. 对于同名的类,可以放在不同的包

  3. 包可以限定访问权限控制

2.2 IDEA如何新建

方式1:新建包,然后在包下创建类

方式2:创建类的同时,自动建包【 .作为包名和类名的分隔符】

2.3 导包方式
  1. 导入其他包下的类:import exer04.Stu;

  2. 若需要导入多个包下同名的类,需要使用全类名引入,即 包名.类名 的方式

test01.Stu ss = new test01.Stu();

2.4 命名规则
  1. 组成:数字、字母、下划线,一般都是字母,最多配上数字,比较多见

  2. 一般使用小写

  3. 一般使用域名倒置 www.baidu.com ,倒置com.baidu.项目名称.模块名称.xxx

参考gitHub上的一些顶级项目的规范,比如 Flink
在这里插入图片描述

2.5访问权限控制

在这里插入图片描述

3.基本类型值传递和引用类型传递

在这里插入图片描述

4.继承

继承的前提:满足is a关系

4.1 是什么

继承是面向对象三大特征之一。

将共性【属性和方法】抽取出来,放到一个类中,这个类我们称之为父类/基类/超类。在java中,

只有父类,只要是你的长辈都称为父类。区别于生活中的称呼。

4.2 为什么

前面写了Dog和Penguin,他们有没有共性【属性 name、health、love和方法】,都将其划归为宠物

类。有很多重复代码,比如又来一个Cat,它可能也有name、health、love。针对上述同一个类别

【Pet】下的多个宠物,能否将其共性抽取出来,目的:①简化代码;②可维护性和扩展性好。

Java提供了解决机制:继承

4.3 怎么用
  1. 抽取共性,放到父类中

  2. 建立子父类之间的关系,用一个关键字 extends

  3. 在子类中,编写子类特有的属性和方法

4.4 继承细节
  1. java中没有多继承,只有单根继承,只有一个亲爹,干爹不算。即 extends 后面只能有一个类

  2. java中可以有多层继承: A extends B , B extends C ,A和B的关系,A和C的关系,B和C都是A

    的父类,B是A的直接父类,C是A的间接父类

  3. 哪些成员【属性、普通方法、构造方法】可以继承?哪些不能继承?

    ①属性能否继承:ok

    ②普通方法能否继承:ok

    ③构造方法能否继承:不能,若能的话,子类可以造爹。

    哪些修饰符修饰的可以继承: public 、 protected 【参见我们上的访问修饰符】、 默认 【同包】

    哪些修饰修饰的不能继承: private

  4. 继承下的构造方法如何执行?

    ①先父后子,先有父类,再有子类。不是孙悟空,必须现有父类的存在,才能创建子类对象。

    ②若在子类中,显示的用this调用了其他的构造方法,先走this的这个构造,然后走你调用的那个

    ③若在子类中,显示的使用super调用父类的构造方法,先走父类对应参数的构造,然后走子类自

    己的

  5. 继承关系之间的类图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HOSyftSF-1621696910454)(C:\Users\wjl\AppData\Roaming\Typora\typora-user-images\image-20210522231002336.png)]

4.5 super & this

this:当前类中

super:子类中使用,调用的是父类的构造方法、属性、方法

用法跟this一样

4.6 方法重写

vs 重载

从父类继承过来的方法,可能不满足子类的需求,需要重新改造,我们称之为方法重写/覆盖。

前提:继承/实现【接口】

重写的特点:

  1. 方法名相同,参数列表相同

  2. 返回类型相同或者是其子类(小于父类)

  3. 访问修饰符,不能严于父类(大于等于父类),比如父类是默认,子类只能是默认、 protected 、 public

  4. 还有子类抛出的异常要大于等于父类

5.抽象类

5.1为什么要有抽象类

我们每个宠物都可以有一个eat方法,但是每个宠物具体吃什么,我们不知道也不关心,所以,我们将

这样的方法(只关心有这么一个行为,不关心具体实现)定义为抽象方法,抽象方法若在一个类中,对

类的要求是,该类是一个抽象类。

好处:

  1. 父类只定义行为,不关心实现,即该方法没有方法体;

  2. 上面的方法重写,其实并没有强制必须重写,但是若使用了抽象方法,子类必须重写抽象方法或者

子类也为抽象类。

抽象类的目的:其实还是为了使用继承关系,所以依然满足is a的关系。

5.2 怎么用
  1. 对类使用关键字 abstract 进行修饰

  2. 方法使用 abstract进行修饰,同时没有方法体,除此以外,跟之前的方法声明没有任何区别

5.3 细节
  1. 抽象类能否实例化(创建对象)?

    语义层面:若可以创建对象,就可以调用抽象方法,怎么执行???? 不成立

    语法层面:Java语法不允许

  2. 抽象类中可以有哪些成员?

    ①成员变量

    ②普通方法

    ③抽象方法:非必须

    ④构造方法,子类在创建对象的时候,需要调用父类的构造方法

    ⑤代码块、内部类

6.小结

  1. 封装

好处、用法【属性私有化、getXxx和setXxx方法,通过getXxx和setXxx获取和设置属性值】

会用即可

​ 域名倒置、同名的多个类都要使用的话,需要使用全类名 包名.类名

​ 访问修饰符 4321 √

  1. 基本类型和引用类型值传递

    都是值传递,基本类型是具体值的copy,而引用类型是地址值的copy,都是在栈中拷贝的

  2. 继承

    前提: is a 关系

    语法:父类抽取共性【属性和方法】、子父类建立关系【 extends 】,在子类中添加特有的属性和

    方法

    特点:

  3. 单根继承

  4. 多层继承

    5.方法重写

​ ①继承过来的不符合子类需求,需要重新改造!!!

​ ②子类不想重新写一个不同名的方法

​ 此时并没有限定,子类必须重写父类继承过来的方法。

  1. 抽象方法

    需求:父类有这么一个行为,具体怎么实现,父类就不太清楚了,此时,这样的方法,定义为抽象

    方法。

    具体实现:交给子类根据你自己的逻辑去实现。

    若类中有抽象方法,该类又必须为抽象类

  2. 抽象类

用于继承关系,而且在框架中,抽象很多!!比如在JavaEE中,Servlet就有,

Spring

特点:

  1. 不能实例化

  2. 普通类可以有什么,它就可以有什么,甚至比他还可以多抽象方法

  3. 场景:用于继承 ——>模版方法设计模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight10zzzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值