JavaSE学习日记之封装、继承、多态

本文详细介绍了面向对象编程的三大特性:封装、继承和多态。封装强调通过set/get方法保护属性,提升安全性与复用性;继承允许子类继承父类的特征和行为,减少代码冗余;多态则让父类引用可指向子类对象,实现灵活的代码设计。文中还探讨了构造方法、this与super的使用以及多态的实现方式。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

一点点学习心得,和大家分享。


提示:以下是本篇文章正文内容,下面案例可供参考

一、封装

a、封装的概念及好处

程序不要直接调属性,而是通过set/get方法进行封装。

好处:没有暴露成员属性,提升了安全性,提升了复用性

b、为什么要使用封装?

在普通的程序执行流程是int a = 12; 直接把值赋给引用变量。但是当某些特定情况需要对传入的属性值进行判断时,代码就会显得很臃肿、可读性会变得很差。并且当需要输入大量数据,且都需要判断时,又增加了代码的冗余度。(因为每输入一次,就要进行一次判断)

c、封装的具体实现

1.通过set方法进行赋值封装,get方法取值


2.属性私有化(属性的私有化是为了不让程序在main方法中,能直接给引用变量赋属性值)

 

 当属性不进行私有化的时候,能直接给引用变量赋上属性值,这样就失去了set/get方法封装的意义。本来应该经过判断才能输入的属性值,现在直接跳过了set中的判断阶段,所以一定要记得私有化!!

二、继承

a、继承的好处及性质

共性抽取,把相同的特征和行为抽取到父类中;这样每个子类都可继承父类的特征和行为。具有继承关系,子类可调用父类的属性和方法;同时也可以调独有的属性和方法;但是父类不能调子类的属性和方法。

在Java中不能进行多继承的操作,即一个子类只能有一个父类,但是一个父类可以有多个子类。

在Java中可以进行多级继承的操作,即父亲继承爷爷,孩子继承父亲,那么孩子类就能调用爷爷类中的方法与属性(特别注意,父类中私有的方法和属性是不能进行继承的)。

继承的好处:减少代码量,提高复用性,扩展性

b、继承

用子类用extends父类就行


 

c、多级继承和构造方法

继承特点:有多级继承;但不能多继承
多级继承:儿子继承父亲,父亲继承爷爷; 多继承:有多个父亲(不能有)

不具备继承性的情况:
1. 私有权限不能被继承(私有了,连自身都没法调,例如封装性-属性私有化)
2. 构造方法没有继承性
3. 在不同包下的default权限,没有继承性

让我们测试一下构造方法到底有没有继承性:

 我们知道,在一个类中如果没有构造方法,会自动生成一个无参构造。为了避免测试时不知道调用的是自己写的构造还是父类继承过来的构造,我们就把无参构造变成有参构造。

我们把子类的构造方法加上参数之后,去调用它,会发现不加参数会显示这个构造方法还没有定义。假如构造方法能够继承,那么会执行父类中没加参数的构造方法,但是这却显示没有定义,那么就说明子类是不能继承父类的构造方法的。

---------------------------------------------------------------------------------------------------------------------------------

当我们对子类添加了参数之后,执行结果如下:

 会发现子类的带参构造先执行了父类的无参构造,然后执行自己的带参构造。这是因为其实在图中1位置,还有一个没有显示的super()方法,这个方法会先调用父类的无参。

子类的构造方法都在首句有一个super(),执行之前会先调用父类的无参构造(父类如果没有构造方法那就不执行,对子类没影响),然后执行自己的构造方法。

设计思路:当子类对象实例化时,先将父类的资源空间创建了,子类拥有了父类和自身的资源;这样才有继承性的特点

 d、拓展this和super的异同点

相同:两者都是放在首句。

不同:

this:当前对象         应用:        调属性,先调当前对象的属性,如果没有,再调父类的属性
调方法: 先调当前对象的方法,如果没有,再调父类的方法
调构造方法: 只能调自身构造方法

super:父类对象     应用:         调属性:调父类属性;   调方法:调父类方法
调构造方法:调父类构造方法

二、多态

a、多态的定义

多态的前提: 先要有继承                多态的核心:父类引用直接指向子类对象

引用:指的是接收new空间的变量

例子:具体方法父类不实现,交给子类实现,然后父类用引用去接受子类new出来的对象。这样就能调用子类重写的方法。

 b、传参方式实现多态、返回值方式实现多态

---------------------

传参:不要看谁调用的,看谁传入的,谁传入的谁用多态。

在main方法中,person调用了care()方法,care()方法里面又调用了Pet类的Play()方法,那这两个没有关系的类是怎么联系到一起的呢?

就是在care()中通过传入参数的方式,但是Pet类中的play()方法不是没有具体实现吗?其实就是子类Dog实现了这个方法。我们在main()方法中去具体实现的就是子类实现的方法了,所以写的是new Dog()。只要子类重写了父类的play()方法,都能传入实现。


---------------------

返回值实现多态:

 通过分析上面的案例,其实会发现最终都是new了一个子类,然后去接收。这就又回到那句核心:父类引用去接收子类对象。

以上内容都是新人学习心得,假如有错误请留言,作者一定虚心改正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值