abstract - 抽象的
1、修饰类 - 抽象类,如果一个类是抽象的,那么这个类不能被实例化,只能被继承,所以抽象类一般都是父类;
2、修饰方法 - 抽象方法,如果一个方法是抽象的,那么这个方法不能有实现,含有抽象方法的类一定是抽象类, 但抽象类不一定包含抽象方法;
- 如果一个非抽象类继承了一个抽象类,则这个非抽象的子类必须实现父类中定义的所有抽象方法,除非这个子类也是抽象的;
- 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。
- 如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。
所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。
只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握!
为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编译会出现错误。
Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)
static - 静态
1、修饰属性 - 静态属性,可以用类名引用,而不必用对象来引用,所以静态属性是归类所有的,而不属于某一个具体的对象, 实际上,它是被该类的所有对象所共享;
- 静态属性又叫做类属性 ,非静态属性又叫做对象属性;
- 一般情况下,我们都是用类名来引用静态属性,而不用对象来引用;
2、修饰方法 - 静态方法,可以用类名直接调用,不需要用对象,一般称之为类方法;
- 静态方法中不能引用类中的非静态成员;
思考:main方法为什么必须是静态方法?
3、静态块 - 静态块中的代码是在类型信息加载到方法区后立即被执行的,作用是给静态属性进行初始化的;
- 静态块中不能引用非静态成员;
问题 - 单例模式(至多只能被实例化一次) - > 用静态来解决的一个经典问题; com.FirstJava.singleton
1、如何阻止用户用new关键字任意生成该类的对象 -> 私有的构造方法;
2、如何让用户得到对象 -> 给用户提供一个方法,用这个方法给用户返回该类对象;
3、如何保证对象的唯一性 -> 使用静态属性;
final - 最终的
1、修饰类 - 最终的类,该类不能被继承(目的是这个类不能被扩展,也就是不能被改变);
2、修饰方法 - 最终的方法,该方法不能被子类重写;
3、修饰属性 - 称之为常量,常量的命名要求所有字母均大写,其值不能被改变,必须有初始化;
4、修饰局部变量 - final的局部变量只能被赋值一次;
内部类 - 在一个类中定义另一个类
1、内部类是外部类的一个成员,所以所有能够修饰成员的关键字都能够修饰内部类,甚至可以是静态的;
2、内部类对象可以访问其外部类中的所有成员,包括私有的;
问题 - 迭代器模式 - 集合类