必须覆盖的方法:派生类必须覆盖基类中的抽象的方法,否则派生类自身也成为抽象类
不能覆盖的方法:基类中声明为final的终结方法;基类中声明为static 的静态方法
终结类与终结方法:
1.被final修饰符修饰的类和方法
2.终结类不能被继承,不能有派生类
3.终结方法不能被当前类的子类重写,不能被派生类覆盖
final class name { . . . }
抽象类
1.代表一个抽象概念的类
2.没有具体实例对象的类,不能使用new方法进行实例化
3.类前需加修饰符abstract
4.可包含常规类能够包含的任何东西,例如构造方法,非抽象方法
5.也可包含抽象方法,这种方法只有方法的声明,而没有方法的实现
意义:抽象类是类层次中较高层次的概括,抽象类的作用是让其他类来继承它的抽象化的特征;抽象类中可以包括被它的所有子类共享的公共行为;抽象类可以包括被它的所有子类共享的公共属性;在程序中不能用抽象类作为模板来创建对象;在用户生成实例时强迫用户生成更具体的实例,保证代码的安全性
abstract class Number {
.. .
}
抽象方法:publicabstract <returnType> <methodName>(...);
1.仅有方法头,而没有方法体和操作实现
2.具体实现由当前类的不同子类在它们各自的类声明中完成
3.抽象类可以包含抽象方法
注意:
1.一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体,即重写父类中的所有抽象方法
2.只有抽象类才能具有抽象方法,即如果一个类中含有抽象方法,则必须将这个类声明为抽象类
3.除了抽象方法,抽象类中还可以包括非抽象方法
泛型:
泛型类:在类名后面加上“<Type>”
泛型方法:在方法名前加上“<Type>”
“?”代表任意一种类型,它被称为通配符
有限制的泛型是指,在参数“Type”后面使用“extends”关键字并加上类名或接口名,表明参数所代表的类型必须是改类的关键字或者实现了该接口
对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implements关键字
接口 :使抽象的概念更深入了一层,是一个“纯”抽象类,它只提供一种形式,并不提供实现。允许创建者规定方法的基本形式:方法名、参数列表以及返回类型,但不规定方法主体,也可以包含基本数据类型的数据成员,但它们都默认为static和final
作用:接口允许我们在看起来不相干的对象之间定义共同行为
[接口修饰符] interface 接口名称 [extends 父接口名]
{
…//方法的原型声明或静态常量
}
接口的数据成员一定要赋初值,且此值将不能再更改,允许省略final关键字
接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字
接口的实现
public class 类名称 implements 接口名称 {
/* Bodies for the interface methods */
/* Own data and methods. */
}
必须实现接口中的所有方法
来自接口的方法必须声明成public
多重继承:Java的设计以简单实用为导向,不允许一个类有多个父类。但允许一个类可以实现多个接口,通过这种机制可实现多重继承。
[类修饰符] class 类名称 implements 接口1,接口2, …
{
… …
}
接口扩展:接口可通过扩展的技术派生出新的接口。原来的接口称为基接口(base interface)或父接口(super interface)。 派生出的接口称为派生接口(derived interface)或子接口(sub interface)。 派生接口不仅可以保有父接口的成员,同时也可加入新成员以满足实际问题的需要。实现接口的类也必须实现此接口的父接口。
interface 子接口的名称 extends 父接口的名称1,父接口的名称2,…
{
… …
}
塑型 :类型转换 方式:隐式(自动)的类型转换;显式(强制)的类型转换
对象包括:基本数据类型:将值从一种形式转换成另一种形式
引用变量:只能被塑型为任何一个父类类型,对象所属的类实现的一个接口,被塑型为父类或接口后,再被塑型回其本身所在的类。
隐式(自动)的类型转换:
1.基本数据类型:相容类型之间存储容量低的自动向存储容量高的类型转换
2.引用变量:被塑型成更一般的类;被塑型为对象所属类实现的接口类型
显式(强制)的类型转换
塑型的应用
1.赋值转换:赋值号右边的表达式类型或对象转换为左边的类型
2.方法调用转换:实参的类型转换为形参的类型
3.算术表达式转换:算数混合运算时,不同类型的项转换为相同的类型再进行运算
4.字符串转换:字符串连接运算时,如果一个操作数为字符串,一个操作数为数值型,则会自动将数值型转换为字符串
5.当一个类对象被塑型为其父类后,它提供的方法会减少
方法的查找:
1.实例方法的查找:从对象创建时的类开始,沿类层次向上查找
2.类方法的查找:总是在引用变量声明时所属的类中进行查找
多态:是指不同类型的对象可以响应相同的消息;从相同的基类派生出来的多个类型可被当作同一种类型对待,可对这些不同的类型进行同样的处理,由于多态性,这些不同派生类对象响应同一方法时的行为是有所差别的
目的:所有的对象都可被塑型为相同的类型,响应相同的消息;使代码变得简单且容易理解;使程序具有很好的“扩展性”
绑定:将一个方法调用同一个方法主体连接到一起
早期绑定:程序运行之前执行绑定
晚期绑定:也叫作“动态绑定”或运行期绑定;基于对象的类别,在程序运行时执行绑定
Math.random()*100; //生成100以内的数
多态的应用:
向上塑型技术:一个父类的引用变量可以指向不同的子类对象
动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而实现多态性
构造方法的调用顺序:
1.调用基类的构造方法。这个步骤会不断重复下去,首先被初始化的是分级结构的根部,然后是下一个派生类,等等。直到抵达最深一层的派生类
2.按声明顺序调用成员初始化模块
3.调用派生构造方法
当我们在构造派生类的时候,必须能假定基类的所有成员都是有效的。在构造方法内部,必须保证使用的所有成员都已初始化。因此唯一的办法就是首先调用基类构造方法,然后在进入派生类构造方法之前,初始化所有能够访问的成员
内部类:
在另一个类或方法的定义中定义的类
可访问其外部类中的所有数据成员和方法成员
可对逻辑上相互联系的类进行分组
对于同一个包中的其他类来说,能够隐藏
可非常方便地编写事件驱动程序
声明方式
命名的内部类:可在类的内部多次使用
匿名内部类:可在new关键字后声明内部类,并立即创建一个对象
假设外层类名为Myclass,则该类的内部类名为
Myclass$c1.class (c1为命名的内部类名)
Myclass$1.class (表示类中声明的第一个匿名内部类)