关于继承、封装、多态、抽象和接口(Java)
1.继承:
通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类。已有的称为父类,新的类称为子类(父类派生子类,子类继承父类)。
(1)继承的优点:①代码的可重用性;
②父类的属性的方法可用于子类;
③子类可扩展父类的属性和方法;
④设计应用程序变得更加简单。
(2)关键字“is a”用于判断父类和子类的继承关系是否正确。
(3)Java中继承的实现:
public class 子类 extends 父类{}
(4)继承的单根性:在Java中一个类只能有一个父类;
传递性:一个Java类可以父类,父类也可以有父类。
(5)所有类的根类:Object类,又叫基类或超类。Object类是每个Java类的父类,要么是直接的父类,要么就是间接的父类。
Object类中的三个重要方法:
①public boolean equals(Object x):检测两个对象是否相等。该方法经常被重写。若两个对象通过该方法判断是相等的,那么两个对象的 hashCode()方法应该产生相同的哈希码
②public String toString:该方法返回对象的字符串表示。用字符串来表示对象有助于调试或测试。
③protected void finalize() throws Throwale:该方法在对象将要被垃圾回收时调用。
(6)方法重写:子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为。该行为方法生在子类中,对父类方法重写。
子类重写父类方法时,必须遵循如下规则:
①子类的方法的返回值类型、方法名和形式参数列表必须和父类中的是相同的;
②访问修饰符必须不小于父类中的访问修饰符;
③子类中重写抛出的异常不能比父类中抛出的异常多。
(7)super 关键字:子类想要给继承的方法添加行为,但并不完全替换父类的方法。(默认情况下,子类构造器会调用父类的无参构造方法)
(8)final 关键字:当不希望一个类被继承是则在class前加上关键字final。final关键字可以出现在返回值类型之前的任意位置,习惯上是放在访问修饰符之后。
①final类:一个类可以声明为最终类的 。 最终类不能被继承。
②final方法:一个方法可以声明为最终的 。 最终方法不能被重写。
补充:父类的构造方法不能被继承,可用super( , , )来调用构造器,用super调用父类方法。
(9)abstract关键字:使用关键字abstract可以声明一个抽象类,该关键字可以出现在类声明时class关键字前的任何地方。当类没有实例化必要时,可将该类改为抽象类。
(10)抽象方法:①没有方法主体;②必须出现在抽象类中;③在子类中必须被重写,除非子类也是抽象类。
2.封装:
(1)封装是使类中的成员变量都是private,并提供public方法访问这些成员变量的技术,封装也被称为数据隐藏。作用:保证数据的安全性。
(2)访问器方法:允许获取成员变量的get方法;
修改器方法:允许改变成员变量的方法。
(3)封装的好处:①类的成员变量可以成为只读或是只写的;
②类可以对储存在其成员变量中的内容有一个整体的控制;
③类的用户不需要知道类是如何存储数据。
eg:
1 public class Students{
2 private String name;
3 public void setName(String name){
4 this.name = name;
5 }
6 public String getName(){
7 return name;
8 }
9 }
3.多态( polymorphism ):
(1)是指一个对象有多种形式的能力,一个类的子类可以定义他们唯一的行为,同时共享父类的某些相同的特征。
静态多态:①在程序编译时发生;
②实现方式: 方法重载;
③规则:依据对象在定义时的类型相应的调用对应类中的重载方法;
动态多态:①在运行时发生;
②实现方式: 重写父类的同名成员的方法
③调用规则:依据对象在实例化时的类型,相应的调用对应类中的同名成员的方法。
(2)多态的技术基础:①向上转型技术:一个父类的引用变量可以指向不的子类对象;
②instanceof关键字:用于判断运行时对象的真正类型(Java语言的多态机制导致了引用变量的声明类型和实际引用对象的类型可能不一致,因此 引用instanceof运算符);
③动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法。
向上转型:由低精度类型转为高精度类型实行自动转换;
向下转型:由高精度类型转为低精度类型需使用强制类型转换符。
4.接口—特殊的抽象类(interface):
(1) ①接口中全都是抽象方法,不能被实例化;
②类不能继承接口,只能“实现”接口所定义的方法;
(2)接口与类
相似之处:
①接口可以有任意数量的方法;
②接口保存以“ .Java ”为后缀名的文件,接口名需要与文件名匹配;
③接口编译后是后缀名为“ .class ”的字节码文件;
④在包中的接口,其相应的字节码文件必须放置在和包名称相匹配的一个目录结构中。
不同之处:
①接口不能被实例化;
②接口不包含任何构造器;
③接口中所有的方法都是抽象的;
④接口中不能包含实例成员变量,唯一可以出现在接口中的成员变量必须是同时声明为static和final,即公有静态常量;
⑤接口不能被一个类继承,只能被一个类实现;
⑥一个接口能够继承多个接口。
(3)接口具有以下性质:
①接口默认是抽象的;
②接口的中每一个方法默认也是抽象的;
③接口中的方法默认访问级为public。
(4)接口使用原则:
①使用接口解决多继承;
②使用接口为外部类添加功能;
③以面向对象的角度考虑,量一个类与生俱来的特征和行为和依赖于外部的可选特征和行为分离。
(5)类实现接口有2个选择:
①实现接口中所定义的所有方法;
②声明自己为抽象类。
使用关键字implements类实现接口,该关键字放在类声明的extends部分之后
eg:
public class 类名 extends 父类名 implements 接口名
一个类可以实现多个接口,接口之间用逗号分隔。
implements 与 is a 都是继承关系。
(5)使用接口的好处:
①将设计和实现分离,对外隐藏了实现;
②面向接口编程是OOP的核心。
关于继承、封装、多态、抽象和接口(Java)的更多相关文章
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- JavaScript 继承 封装 多态实现及原理详解
面向对象的三大特性 封装 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏.封装是面向对象的特征之一,是对象和类概念的主要特性. ...
- 继承(extends), 多态 , 抽象(abstract)接口() 易混难点解析
特性 java是单继承的,一个类直接继承的父类只能有唯一的一个 java中父类可以有多个子类 Object是所有类的父类,一个类没有父类则默认继承Object; 继承中的重写 子类重写方法访问权限不能 ...
- JavaScript基础--面向对象三大特性(八):继承封装多态
一.构造函数基本用法:function 类名(参数列表){ 属性=参数值} function Person(name,age){ this.name = name; this.age = age; } ...
- java面向对象(封装,继承,多态,抽象,接口的定义和实现)
1.封装 在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定 ...
- Java面向对象的基本概念(对象、封装、继承、多态、抽象、接口、泛型)
对象:是一个自包含的实体,用一组可识别的特征和行为来标识. 类:具有相同的属性和功能的对象的抽象合集.(类关键字class,首字母大写). 实例:就是一个真实的对象. 实例化:创建对象的过程,关键字是 ...
- Java—继承、封装、抽象、多态
类.对象和包 1) 面向对象编程(Object Oriented Programming ,简称 OOP):20世纪70年代以后开始流行. 2) 结构化编程与面向对象编程的区别: A. 在结构化编程中 ...
- java四大特性理解(封装继承多态抽象)
封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口.面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治.封装的对象,这些对象通过一个受保护的接口访问其他对象.封装是一 ...
- Java知识回顾 (7) 继承、多态与接口、封装
一.继承 1.1 继承的特性 子类拥有父类非 private 的属性.方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. Java 的继承是单继承, ...
随机推荐
- 解决Oracle12cr2自创建用户无法登录的问题
说明: 下面创建是创建CDB本地用户,不是PDB应用程序用户,如果是PDB应用程序创建语法会不一样.下面介绍创建CDB本地用户. 创建表空空间 CREATE TABLESPACE YH datafil ...
- 广度优先搜索(BFS)解题总结
定义 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法. 简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点. 如果所有节点均被访问,则算法中止. B ...
- Android开发java开发之常用英文词汇汇总。程序员必备英语单词
ANR (Application Not Response ) bundle 捆, entire 整个的,完整的 lifetime 生命周期 entire lifetime 完整生命周期 visi ...
- Pytest-allure 生成美观好看的测试报告
在我们使用pytest-allure生成测试报告时,需要分为以下几步来执行 1.pytest TestCal.py --alluredir=/tmp/my_allure_results[这一步,是设置 ...
- python中os.path下模块总结
import os path =os.path.abspath("abc.text") # 返回绝对路径 print("path:",path) # path: ...
- 设计模式(多个if的处理)
使用场景 如果在代码中出现大量if判断,再执行一些比较复杂的业务操作,类似于以下情况. @Test void test() { String str = "A"; if (str. ...
- Springboot-Mybatis-进阶
目录 数据库关系 ResultMap association collection 动态sql if where set choose foreach 缓存 一级缓存 二级缓存 开启二级缓存 配置 异 ...
- Codeforces1247D Power Products 暴力+优化
题意 给定数组\(a(\left| a \right|\leq 10^5)\)和整数\(k(2\leq k \leq 100)\),问满足一下条件的二元组\(<i,j>\)的数目: \(1 ...
- uni-app 修改富文本信息中的图片样式
var richtext= res.data.data.richtext; const regex = new RegExp('<img', 'gi'); richtext= richtext. ...
- SpringCloud入门 消息总线 Bus
消息总线 1.概述 使用SpringCloud Bus配和Spring Cloud Config使用实现配置的动态刷新 Bus只支持消息处理:RabbitMQ和Kafaka. 能干嘛 能管理和传播分布 ...