Java学习进程5
·
类的继承
递归
递归:
1.方法调用自己本身
2.设置递归的退出条件(使用递归时一定要有出口)
example
实现斐波拉契数列(到100的和)。
package com.yw.oop0606;
/**
* @author YAN
* @date 2026/6/6 19:07
* @description
*/
public class digui
{
//递归方法:实现斐波那契数列
public static int f(int n){
//递归出口
if(n == 1 || n == 2){
return 1;
}
//f(n)=f(n-1)+f(n-2)
return f(n-1)+f(n-2);
}
public static void main(String[] args) {
//输出前100项
for(int i=1;i<=100;i++){
System.out.print(f(i)+" ");
}
}
}
类的继承
继承基础知识
继承的格式
public class 子类(派生类) 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
// 父类 Student
public class Student {
private String name;
protected void setName(String n) {
name = n;
}
public String getName() {
return name;
}
public void printName() {
System.out.println("名字:" + name);
}
public void study() {
System.out.println(name + "正在学习!");
}
}
// 子类 UNStudent 继承 Student
public class UNStudent extends Student {
@Override
public void printName() {
// 保留父类原有功能
super.printName();
// 子类新增功能
System.out.println("这是子类重写后的名字输出!");
}
@Override
public void study() {
// 保留父类中原有的功能,调用父类方法
//super 表示当前类的父类对象
super.study();
// 子类新增功能
System.out.println("大学生还在自学编程!");
}
}
super关键字
- 属性:访问父类成员变量
- super.方法():调用父类成员方法,即保留父类原有功能
- super():调用父类构造方法,必须放在子类构造第一行
- 在子类的调用方法中一定要调用一次父类的构造方法(子类默认调用父类的构造方法)
final和static
static静态变量(类变量)不需要通过对象访问final:类不能被继承(绝育类) 方法不能被重写
关于转型
1.自动转型(向上转型)
父类 对象变量名 = new 子类()
继承后子类可以是父类类型
自动转型问题:转型后只能调用子类中的方法
2.强制转型(向下转型)
要求:该对象先进行了自动转型
父类不能强制转为子类
更多推荐


所有评论(0)