Java学习——面向对象【3】
1. 继承
- java的类是单继承(一个子类只能继承一个父类),不能多继承(多个父类):A继承自B,A也继承自C,可以多重继承,就是A继承自B,B继承自C(A->B->C),
- 所有的类都继承于java.lang.Object。
- 子类继承父类中非private的属性和方法。
- 子类不能继承父类的构造器(构造方法或者构造函数)。
- 如果父类的构造器带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的当属列表。如果父类有无参构造器,则在子类的构造器中用super调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类 的无参构造器。
2. 多态
多态是同一个行为具有多个不同表现形式或形态的能力。方法的重写和重载是java多态性的不同表现。
重写(override) | 重载(overload) | |
范围 | 子类重写父类 | 同一个类 |
定义 | 完全相同 |
1. 参数列表必须改变 2. 返回类型/访问修饰符可以修改 |
访问权限 | 不能比父类的低 | 可以修改 |
异常 |
1. 可以有任何非强制异常 2. 不能有新的强制性异常或比原来更广泛的 |
被重载的方法可以声明新的或更广的检查异常 |
final函数 | 不能被重写 | 可以 |
static函数 | 不能被重写 | 可以 |
构造函数 | 不能被重写 | 可以 |
其他 |
1. 子类和父类在同一个包中,那么子类可以重写所有方法,除了声明为private和final的方法 2. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法 3. 如果不能继承一个方法,则不能重写这个方法 |
3. 封装(Encapsulation)
将抽象性函式接口的实作细节部份包装、隐藏起来的方法。
4. 抽象类
不能被实例化
不一定包含抽象方法,但是有抽象方法的类必定是抽象类
抽象类中的抽象方法只是声明,不包含方法体
构造方法,类方法(用static修饰的方法)不能声明为抽象方法
抽象类的子类必须给出抽象类中所有的抽象方法的具体实现,除非该子类也是抽象类
5. 接口(Interface)
接口是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
类 | 接口 | 抽象类 | |
构造方法 | 有 | 无 | 有 |
实例化对象 | 可以 | 不可以 | 不可以 |
抽象方法 | 无 | 必须是抽象方法 | 可以有非抽象方法 |
方法修饰符 | 任意 | public abstract | 任意 |
成员变量类型 | 任意 | public static final | 任意 |
static | 可以有 | 不能有 | 可以有 |
继承 | 单继承 | 可以多继承 | 单继承 |
类继承(实现)方式 | extends 类名 | implements 接口名 | extends 类名 |
其他 |
1. 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常 2. 接口可以继承(extends)另一接口 3. 如果实现接口的类是抽象类,那么就没必要实现该接口的方法 |
标记接口: 没有任何方法和属性的接口。仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。标记接口主要用于以下两种目的:
建立一个公共的父接口:正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
向一个类添加数据类型:实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。
6. java包(package)
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。
包的作用
把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
避免名字冲突:如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。
包限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
例子
创建一个animals的包,并在 animals 包中加入一个接口(interface)。通常使用小写的字母来命名避免与类、接口名字的冲突。
package animals;
interface Animal {
public void eat();
public void travel();
}
类放在包中会有两种主要的结果:
- 包名成为类名的一部分
- 包名必须与相应的字节码所在的目录结构相吻合
7. import 关键字
"import" 语句导入包,则程序中就可以使用该包内的成员。
9. 其他
super:引用当前对象的父类,用于访问父类成员
this:指向当前对象
Java学习——面向对象【3】的更多相关文章
- Java学习---面向对象的远程方法调用[RMI]
基础知识 分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. 常见的分 ...
- java学习面向对象之异常之一
一.异常的概述: 什么是异常?在我们编写java程序的时候,会出现一些问题,比如内存溢出啊或者数组索引超出最大索引啊,这些编程当中出现的这些个问题就是异常.但是异常也分为可以处理的和不可以处理的.比如 ...
- java学习面向对象之匿名内部类
之前我们提到“匿名”这个字眼的时候,是在学习new对象的时候,创建匿名对象的时候用到的,之所以说是匿名,是因为直接创建对象,而没有把这个对象赋值给某个值,才称之为匿名. 匿名对象回顾: class N ...
- java学习面向对象之内部类
什么是面向对象内部类呢?所谓的内部类,即从字面意义上来理解的话,就是把类放到类当中. 那么内部类都有什么特点呢? 1.内部类可以访问包裹他的类的成员. 2.如果包裹他的类想访问被其包裹的类的话就得实例 ...
- java学习面向对象之多态
如何理解多态,让我们举个例子来描述一下,因为单纯的说多态大家可能不理解: abstract class Animal { ; abstract void eat(); public void run( ...
- java学习面向对象之接口
上一节当中我们说道抽象类,抽象类当中的方法可以是抽象的也可以是非抽象的,那么当抽象类中所有方法都是抽象的时候,我们就可以把它重新定义为接口.代码示例: abstract class Animal { ...
- java学习面向对象之父子构造函数初始化
在之前讲到java面向对象继承的时候,我们只讲到了两个比较重要的知识点,一个是父子类当中有同名的成员变量,这个时候,我们引入了super这个关键字来区分这两个同名成员变量,除此之外,我们还讲到了父子同 ...
- java学习面向对象之继承
在我们编写程序的过程当中,会遇到这种情况: 比如现在有一个狗,他的功能有跑,有跳,有吃,有叫,属性有雌雄,大小,颜色等等,同时现在我们也有一个猫,上述功能她也有.这个时候我们写代码的时候,就得分别把上 ...
- java学习--面向对象
对象及类的概念 对象是java程序的核心,在java程序中“万事万物皆对象” 对象可以看成是属性和方法的封装体 类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所应具有的属性和方法 J2SD ...
- Java学习 面向对象(下)——Java疯狂讲义th4
面向对象(下) [TOC] 包装类 通过包装类可以把8个基本类型的值包装成对象使用. 自动拆箱.自动装箱 把字符串类型值转换成基本类型的值: 包装类的 parseXxx(String s)静态方法 包 ...
随机推荐
- [译]SQL SERVER 2016 – Temporal Tables
原文 Temporal Table是SQL Server2016的新特性.能存储你表里面任意时间点的数据信息. 换句话说,如果你针对一张表执行任何更新或者删除操作,老数据会被新数据覆盖,下次查询的时候 ...
- 20155324 2016-2017-2 《Java程序设计》第7周学习总结
20155324 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 认识时间与日期 - 时间的度量 1.格林威治时间(GMT):通过观察太阳而得,因为地球公转轨 ...
- 2017CCPC秦皇岛 A题Balloon Robot&&ZOJ3981【模拟】
题意: 一个机器人在长为M的圆形轨道上送气球,当机器人到达M号点的时候下一站会回到1号点,且全程不会停止运动.现在在长为M的轨道上有N个队伍,队伍会在某个时间做需要一个气球,机器人需要送过去.一共有P ...
- 第20月第28天 tensorflow
1. 505 sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade virtualenv 506 virt ...
- 牛客寒假训练营3 B 处女座的比赛资格(拓扑排序+最短路)
题目链接 这个题,一眼看上去就是最短路的题,边权有负环显然不能用dij,然后出题人又卡了spfa,,那怎么办的想点办法啊,好像还有一个拓扑排序可以求最短路吧,这时候正解就已经得到了,就是拓扑排序求最短 ...
- python 的基础 学习 第六天 基础数据类型的操作方法 字典
1,字典 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且ke ...
- DeepLearning.ai-Week2-Residual Networks
1 - Import Packages import numpy as np from keras import layers from keras.layers import Input, Add, ...
- XLMHttpRequest对象的status属性,readyState属性以及onreadystatechange事件
注:XLMHttpRequest简写为XHR 一.HTTP请求过程 (1)建立TCP链接 (2)web浏览器向web服务器发送请求命令 (3)web浏览器发送请求头信息 (4)web服务器应答 (5) ...
- python - 语言介绍
python 程序的执行过程 python 的实现 Cpython 原始.标准的实现方式 Jython 用于与Java语言继承的实现 Ironpython 用于与.net框架继承的实现 python ...
- 迅为-i.MX6Q核心板_四核工业级
飞思卡尔Freescale Cortex A9 四核处理器处理器:CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 核心板工艺:十层设计,沉金工艺基本参数:内存 ...