Java面向对象详解(下)

🐒个人主页

🏅JavaSE系列专栏

📖前言:

本篇会详细讲述面向对象三大特征:封装,继承,多态,super关键字,instanceof关键字,final关键字,接口,

🏅封装

封装的概念

封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问 。

封装的好处

在这里插入图片描述

封装的核心理解

广义的封装:将某些功能封装到一个方法内,进行包装。
面向对象语言中的封装
是通过访问权限修饰符进行控制 对类中信息设置其可见性。对信息进行隐藏,不让外界知道类中有哪些信息。

🏅继承

继承的概念

继承:继承是面向对象程序设计不可缺少的设计思想,是实现代码可重用的根基,是提高代码可扩展性的主要途径。
● 继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力

继承的特点

● 在JAVA中使用extends关键字来表示继承关系。
● JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个直接父类。
● 继承之后子类可以调用父类的所有非私有属性和非私有方法
继承是代码重用的一种方式

何时使用继承?

继承与真实世界类似
在这里插入图片描述

继承的形式

在这里插入图片描述

继承的传递性

C类从B类继承,B类又从A类继承
那么C类就具有B类和A类的所有非私有属性和非私有方法
【注意】当一个没有继承任何一个类时,jvm会默认让类继承Object类,Object是 java为所有类提供的基类

继承的构造方法

子类构造方法会先调用父类构造方法
🪅使用super关键字可以调用父类任意一个构造方法,必须写在构造方法的第一行
🪅如果子类的构造方法中没有显式地调用父类构造方法,则系统默认调用父类无参数的构造方法。

🧸super关键字

🎇用途:

使用super关键字可以访问父类成员
• 用super.成员变量名来引用父类成员变量
• 用super.方法名(参数列表)访问父类的方法。
• 用super.构造方法(参数列表)访问父类构造方法

⚠理解误区:

: 不要把super误认为是父类对象.
在创建子类对象时,不会创建父类对象. 只会将父类中的信息加载到子类对象中存储
在这里插入图片描述

🧸方法的重写(OverRide)

● 🎇应用场景
当父类的方法实现不能满足子类需求时,可以对方法进行重写( override),在子类中可以根据需要对从基类中继承来的方法进行重写
🎇方法重写规则
• 方法名相同、参数列表相同;
• 返回值类型相同;
• 访问权限不能小于父类权限;
【注意】构造方法,静态方法不能重写,成员变量不存在重写

🧸抽象类

🎇概念
● 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
● 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法。
● 用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类

🎇抽象方法
• 抽象方法是一种特殊的方法:它只有声明,而没有具体的实现(没有方法体).
• 抽象方法必须用abstract关键字进行修饰
🎇特点 :
• 抽象类不能被实例化,但可以有构造方法,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。
● 抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类。
🎇一般语法 :
在这里插入图片描述
【总结】抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象法程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能。

🏅多态

多态的概念

同一种事物,在不同时刻表现不同的状态
使用父类可以来表示任意的子类对象

多态存在的三个必要条件

● 要有继承(包括接口的实现)(前提条件)
● 要有重写(前提条件)
● 父类引用指向子类对象

多态存在的效果

在这里插入图片描述说白了:就是方法调用的时候只能调用父类的(因为它是父类类型),但是运行的时候运行的是子类中的方法。
Animal dog1 = new Dog();
编译期间看左边,运行期间看右边
🏴‍☠️:对于静态方法,成员变量,编译运行均看(左边)父类

多态向上转型(类比 类型隐式转换)

🎇向上转型:就是正常的多态形式
Animal dog1 = new Dog();
(把子类对象上升为父类类型)
🎇弊端:
由于在编译期间只能调用父类的方法,导致子类自己特有的方法调用不到

多态向下转型(类比 类型强制转换)

🎇向下转型
Dog dog1 = (Dog) animal ;
(把父类对象降为子类类型)
🎇向下转型的作用是
为了使用子类中的特有方法。
【注意】如果父类有多个子类的话,会报错。原因是其他子类与Dog类型不兼容,不能相互转换。所以需要使用判断:

 if(animal instanceof  Dog){
	 Dog   dog1   =  (Dog)  animal ;
 }

🧸instanceof关键字

🎇概念:
instanceof用于判断是否为指定关系(即父类对象指向子类对象)
例如: animal instanceof Dog
表达式结果为布尔类型返回true

🧸final关键字

相当于定义常量:不能被再次修改
在这里插入图片描述
在这里插入图片描述

🧸接口

在这里插入图片描述

接口的定义和使用

🎇概念
可以看做是一个比较纯正的抽象类,作为设计层面使用的,用来·定义·功能(方法),具体实现交给具体的类
在这里插入图片描述
🎇语法规范
使用 interface 关键字用来声明一个接口。
在这里插入图片描述
🎇接口的使用
类使用implements关键字实现接口。
在类声明lmplements关键字放在class声明后面。
在这里插入图片描述
在这里插入图片描述
🎇接口结构
在这里插入图片描述
🎇 接口的特性
• 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字
• 接口中方法可以是抽象的,静态的,默认的
• 接口中声明的属性默认为 public static final 的
• 接口不是被类继承了,而是要被类实现
• 接口不能实例化对象
• 与继承关系类似,接口与实现类之间存在多态性
• 一个接口能继承其它多个接口
• 当类实现接口的时候,类要实现接口中所有的抽象方法。否则,类必须声明为抽象的类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

信计2102罗铠威

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

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

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

打赏作者

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

抵扣说明:

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

余额充值