关于继承、封装、多态、抽象和接口(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 的继承是单继承, ...
随机推荐
- angular实现地区三级联动
<!DOCTYPE html><html ng-app="myapp"> <head> <meta charset="UTF-8 ...
- 【Go语言入门系列】(七)如何使用Go的方法?
[Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...
- IMGUI
https://github.com/zwcloud/ImGui https://github.com/ocornut/imgui https://usingcpp.wordpress.com/201 ...
- docker打包项目
nginx镜像制作实战 docker容器的主业 docker理念里,容器启动时,应当为它指定主业是什么,如nginx容器主业就是nginx代理服务,tomcat容器就是web服务等等 1.容器创建时, ...
- SSM框架中添加写日志功能
前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...
- ThinkPHP6.0 多应用模式 部署 Layuiadmin 单页版
TP6.0中的路由省略应用名只能用入口文件绑定应用 和 域名绑定应用,经过测试,最后得出域名绑定应用是最合适的部署方式.如果有更好的部署方案,欢迎分享.QQ:23426945 1. 下载TP6.0,引 ...
- python:接口开发
一.flask flask是一个python编写的轻量级框架,可以使用它实现一个网站或者web服务.本文就用flask来开发一个接口. flask需要先安装再引用.pip install flask ...
- django之models报错
django 执行python manage.py makemigrations报错:TypeError: __init__() missing 1 required positional argum ...
- 说说我对 WSGI 的理解
先说下 WSGI 的表面意思,Web Server Gateway Interface 的缩写,即 Web 服务器网关接口. 之前不知道 WSGI 意思的伙伴,看了上面的解释后,我估计也还是不清楚,所 ...
- Unity 如何在窗口大小可以随意改变的情况下让游戏世界完整的显示在镜头中
当我们开发游戏时,如果是开发手机游戏,屏幕窗口的比例是固定的,不会说在运行时改变的. 但是,PC端的游戏就不一定,我希望它能被用户随意拉扯,但完整的内容还是能显示出来,这里我直接放例子: 请注意黑色的 ...