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)静态方法 包 ...
随机推荐
- 二叉搜索树BST
//遍历 void print(int p){ if(!p) return; print(left[p]); printf("%d\n",a[p]); print(right[p] ...
- PDO和MySQLi区别与选择?
当用PHP访问数据库时,除了PHP自带的数据库驱动,我们一般还有两种比较好的选择:PDO和MySQLi.在实际开发过程中要决定选择哪一种首先要对二者有一个比较全面的了解.本文就针对他们的不同点进行分析 ...
- MVC下 Area和Web同名的Controller问题
错误如下图: 解决方案: 1:Area下的XXXAreaRegistration 添加:new string[] { "xxx.Areas.xxx.Controllers" } 2 ...
- select样式设计
举例: select { color: blue; /*去掉边框*/ border: none; outline: none; /*去掉箭头*/ -webkit-appearance: none; / ...
- react编译报错:Import in body of module; reorder to top import/first
原因是这样的: 我把一个组件分为三个文件, |—Home.jsx // 业务逻辑与html Home——|—Home.css // 样式 |—index.js // 引入Home.css ,再把Hom ...
- 第27月第10天 cmake
1.error: tool 'xcodebuild' requires Xcode的解决办法 sudo xcode-select --switch /Applications/Xcode.app/Co ...
- visual studio code运行时报错,无法将“cnpm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称,Cannot find module 'webpack'
前言 因公司技术需求,这段时间成功进入了Vue 2.0 的坑,刚用起Visual Studio Code,却发现问题很多,发现一个错误:cnpm : 无法将“cnpm”项识别为 cmdlet.函数.脚 ...
- 多项式乘法(FFT)学习笔记
------------------------------------------本文只探讨多项式乘法(FFT)在信息学中的应用如有错误或不明欢迎指出或提问,在此不胜感激 多项式 1.系数表示法 ...
- cookie——创建、获取、删除
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 2017-2018-2 20165237 实验二《Java面向对象程序设计》实验报告
##2017-2018-2 20165237 实验二<Java面向对象程序设计>实验报告 No.1 实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/r ...