关于继承、封装、多态、抽象和接口(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 的继承是单继承, ...
随机推荐
- windows快速安装linux虚拟机
1. 场景描述 因测试中需要linux集群,目前的服务器不太方便部署,需要本机(windows7)启动多个linux虚拟机,记录下,希望能帮到需要的朋友. 2. 解决方案 2.1 软件准备 (1)使用 ...
- 上海做假证t
上海做假证[电/薇:187ヘ1184ヘ0909同号]办各类证件-办毕业证-办离婚证,办学位证书,办硕士毕业证,办理文凭学历,办资格证,办房产证不. 这是一个简单的取最大值程序,可以用于处理 i32 数 ...
- Typed Lua
https://the-ravi-programming-language.readthedocs.io/en/latest/ravi-overview.html https://github.com ...
- java 区块
方法区:存放staic变量,方法签名,类信息,字段等 堆:存放对象数据,string常量 栈:存放对象的引用,操作数,没逃逸但是逃逸分析且被编译器产生逃逸优化的对象数据
- 算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA
今天是算法数据结构专题的第33篇文章,我们一起来聊聊最短路问题. 最短路问题也属于图论算法之一,解决的是在一张有向图当中点与点之间的最短距离问题.最短路算法有很多,比较常用的有bellman-ford ...
- 石子合并(区间dp典型例题)
Description 有n堆石子排成一行,每次选择相邻的两堆石子,将其合并为一堆,记录该次合并的得分为两堆石子个数之和.已知每堆石子的石子个数,求当所有石子合并为一堆时,最小的总得分. Input ...
- HDU - 4548-美素数 (欧拉素数筛+打表)
小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为"美素数&quo ...
- 干货:用好这13款VSCode插件,工作效率提升10倍
文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 大家好我是lemon, 马上进入我们今天的主题吧. 又 ...
- 【Go语言入门系列】(九)写这些就是为了搞懂怎么用接口
[Go语言入门系列]前面的文章: [Go语言入门系列](六)再探函数 [Go语言入门系列](七)如何使用Go的方法? [Go语言入门系列](八)Go语言是不是面向对象语言? 1. 引入例子 如果你使用 ...
- Mybatis源码学习第六天(核心流程分析)之Executor分析(补充)
补充上一章没有讲解的三个Executor执行器; 还是贴一下之前的代码吧;我发现其实有些分析注释还是写在代码里面比较好,方便大家理解,之前是我的疏忽,不好意思 @Override public < ...