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)静态方法 包 ...
随机推荐
- Coding语言强弱类型且动静态类型简单解析。附图解
话不多说,上图: (以下均以Java来说明) 对于语言的强弱类型: 1.强类型语言:通俗的点来讲,就是对于数据类型,如果开发者定义了一个int数据类型的变量,那么虚拟机就会特别坚定该变量为int,坚决 ...
- loj 10050 连续子段最大异或和
#include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) using namespace s ...
- [C++]PAT乙级1009. 说反话 (17/20)
/* 1009. 说反话 (20) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例, 在一行内给出总长度不超过80的字符串. 字符串由若干单词和若干 ...
- KMP模板(HDU1711)
#include<stdio.h> #include<math.h> #include<string.h> #include<stack> #inclu ...
- linux 如何保持兼容性
参考链接: https://www.cnblogs.com/MYSQLZOUQI/p/5383594.html
- mongodb 系列 ~ mongo的两种引擎介绍对比
一 简介 两种引擎方式的对比二 对比与说明 1 版本支持 MMAP引擎 3.2版本之前,默认引擎 WT 引擎 3.2版本之后,默认引擎 2 并发性能(核心) M ...
- MGR架构 ~ 节点的维护相关问题
一简介:MGR节点的相关维护二 两种情况 1 MGR读节点异常停止,然后重新启动加入节点进行数据同步 2 MGR读节点新加入集群成员,启动复制进行数据同步三 通用过程 1 新加入节点通过通道 ...
- Android热更新技术——Tinker、nuwa、AndFix、Dexposed
一.热修复技术作用 线上app BUG紧急修复,不重新发版,不重新安装,在线远程修复问题 二.局限性与适用场景 补丁只能针对单一客户端版本,随着版本差异变大补丁体积也会增大: 补丁不能支持所有的修改, ...
- Eclipse安装教程 ——史上最详细安装Java &Python教程说明
参考链接:https://blog.csdn.net/zichen_ziqi/article/details/73995755
- MySql联合查询
将多条查询语句的结果合并为一个结果 *多表查询是横向连接,联合查询是纵向连接. 语法: 查询语句1 union 查询语句2 union 查询语句3 *union关键字默认去重,union all包含重 ...