递归
方法本身调用自己,直到某个条件结束就叫递归。在递归中,简单的递归和循环相似,难点递归需要数学运算。如果递归没有给出结束条件,则容易出现java.lang.StackOverflowError内存溢出(栈溢出,堆溢出)
封装
将相应的属性、行为装到一个类中,然后将所有属性私有化,就叫封装。java类的封装中,会提供get和set操作
继承
类的扩展,扩展得到的称为子类(派生类),扩展的原型称为父类(基类,超类)
父类中应该具有所有子类都共有的属性和行为。java中常用is a来评判是否属于继承,如果一个子类继承了另一个父类,则会具有其所拥有的属性和行为。而java继承中只能单继承(只有一个父类)。在内存中,先是根据父类的内容进行加载,然后加载子类附加项
在子类中写extends关键字来继承。例如:public class 子类 extends 父类{}。父类也可以有父类。如果想修改父类的行为,则需要重写,在子类中,如果有和父类同名的属性和行为,我们可以使用super来调用父类的属性和行为,使用this来调用本类的属性和行为,super()指代父类的构造器,在子类构造器中,第一行会默认调用父类的无参构造器super()。
如果父类中书写了带参构造器,子类在书写时,会默认生成一个无参构造器,但由于子类的无参会默认调用父类的无参,故报错
相同行为,不同实现。分为静态多态和动态多态
静态多态是重载,在运行前就知道结果。动态多态在运行前不知道结果
动态多态有三种体现:1.向上转型 2.instanceof 3.动态绑定机制
抽象
对高父级的类模板就是一个模糊的概念,需要对有各种属性的子类创建对象才能具体描述
抽象的结构:在类的定义时的class前面加abstract 关键字 格式为: public abstract class Role{}
抽象类不创建对象,或者说抽象类不能使用new等措施创建对象,抽象的事物没有描述清楚,所以不能有具体的实例抽象的可以是类,也可以是方法,如:public abstract int zMoney();
抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类!
接口
是一种数据类型,是比抽象类更抽象的表现形式,不是类!接口创建时,只需将class改成interface(习惯性的在类名后面加一个Inter)
接口中的方法都是抽象的
接口中的方法可以不用abstract关键字修饰,但默认为让他修饰(写不写都是抽象方法)
抽象类可以让别的类继承,在类名后加implements 例:Learn2 implements Learn2Inter{}
实现一个接口,有两种选择:1.不去实现方法,将类变成抽象类2.重写所有方法