Java学习进程5
Java学习进程5
递归
递归:
1.方法调用自己本身
2.设置递归的退出条件(使用递归时一定要有出口)
example
实现斐波拉契数列(到100的和)。
packagecom.yw.oop0606;/** * @author YAN * @date 2026/6/6 19:07 * @description */publicclassdigui{//递归方法:实现斐波那契数列publicstaticintf(intn){//递归出口if(n==1||n==2){return1;}//f(n)=f(n-1)+f(n-2)returnf(n-1)+f(n-2);}publicstaticvoidmain(String[]args){//输出前100项for(inti=1;i<=100;i++){System.out.print(f(i)+" ");}}}类的继承
继承基础知识
继承的格式
publicclass子类(派生类)extends父类(基类,超类)implements接口,接口,,,{}注:先写继承再写接口(关于接口的内容见Java学习进程2)
继承后的作用:(同包下)子类会继承父类中所有的非private的属性和方法,但私有属性和方法不能直接调用。
继承的特点:
1.Java中每个类都会默认继承 Object。
2.方法:
(1)定义set方法,设置属性;
(2)定义get方法,获取属性。
3.Java 是单继承语言,一个子类只能直接继承一个父类。
如... extends A,B是错误的
4.可继承权限如下:(权限从高到低)
修饰符 本类 同包类 子类 任意类
public ✅ ✅ ✅ ✅
protected ✅ ✅ ✅ ❌
默认(不写) ✅ ✅ ❌ ❌
private ✅ ❌ ❌ ❌
5. 构造方法不能被继承
6.子类创建对象时,优先执行父类构造方法(super访问父类方法)
方法重写(Override)
作用:当前父类中的方法不能满足当前子类的需求
条件:
- 有继承关系的两个类之间
- 访问修饰符大于等于父类,返回值类型,方法名,参数类型(个数,顺序)完全一样
example
// 父类 StudentpublicclassStudent{privateStringname;protectedvoidsetName(Stringn){name=n;}publicStringgetName(){returnname;}publicvoidprintName(){System.out.println("名字:"+name);}publicvoidstudy(){System.out.println(name+"正在学习!");}}// 子类 UNStudent 继承 StudentpublicclassUNStudentextendsStudent{@OverridepublicvoidprintName(){// 保留父类原有功能super.printName();// 子类新增功能System.out.println("这是子类重写后的名字输出!");}@Overridepublicvoidstudy(){// 保留父类中原有的功能,调用父类方法//super 表示当前类的父类对象super.study();// 子类新增功能System.out.println("大学生还在自学编程!");}}super关键字
- 属性:访问父类成员变量
- super.方法():调用父类成员方法,即保留父类原有功能
- super():调用父类构造方法,必须放在子类构造第一行
- 在子类的调用方法中一定要调用一次父类的构造方法(子类默认调用父类的构造方法)
final和static
static静态变量(类变量)不需要通过对象访问final:类不能被继承(绝育类)方法不能被重写
关于转型
1.自动转型(向上转型)
父类 对象变量名 = new 子类()
继承后子类可以是父类类型
自动转型问题:转型后只能调用子类中的方法
2.强制转型(向下转型)
要求:该对象先进行了自动转型
父类不能强制转为子类
