jave学习进程3

方法递归

那些场景下可以使用递归解决问题?

1.一个大问题可以拆分成多个子问题的解

2.拆分后的子问题和原问题除了数据规模不一样,他们解决思路完全相同

3.存在递归终止条件。

 

如何写出递归代码?

一定要注意方法的语义(这个方法能做什么),不要纠结这个递归如何实现

需要思考如何使用这个方法解决问题

Eg:使用递归方法实现一个数的阶乘

 public static void main(String[] args) {

        Scanner scanner =new Scanner(System.in);

        int num= scanner.nextInt();

        System.out.println(jieCheng(num)+"  "+factor(num));

    }

    public static int jieCheng(int num){

        int n=1;

        for (int i = 1; i <=num ; i++) {

            n*=i;

        }

        return n;

    }

    //传入一个值就能返回他的阶乘

    public static int factor(int num ){

        //终止条件

        if(num==1){

            return num;

        }

        //拆分问题

        //现在已经知道num但是不知道num-1的结果,因此将num-1交给factor

        return num*factor(num-1);

    }

 

多态

通过父类型引用指向子类对象、通过接口回调实现多态。
多态中涉及到的概念:
向上转型、向下转型(强制类型转换,需要加强制类型转换符)
eg:动物为父类、猫、狗为子类

class 动物{

public void sheng(){

System.out.println("动物的声音");

}

}

class cat extends 动物 {

public void sheng(){

System.out.println("喵喵");

}

public void eat(){

System.out.println("一条小鱼");

}

}

class dog extends 动物{

public void sheng(){

System.out.printl("汪汪");

}

public void eat(){

System.out.println("骨头");

}

}

public class yunxing{

public static void main(string[]args){

动物 c1=new cat();//上转型、自动类型转换

c1.sheng();

动物 c2=new dog();

dog b1=(dog)c2;//下转型。这个就是强制类型转换。

 

}

}

上转型只要编译通过,运行就不会出错。

下转型当对象之间不存在继承关系,运行会报错。

如:动物a3 = new dog(); cat c3 =(cat)a3

为了避免这种错误,可以使用instanceof运算符;

instanceof

1.语法格式:

(引用 instanceof 数据类型名)

2.运算符的执行结果类型是布尔类型,(true、false)。

3.引用格式:

假设(c3 instanceof cat)

ture表示引用指向的对象是cat类型,false表示不是。

eg:

if(a3 instanceof cat){

cat c3=(cat)a3;

c3.方法名();

}else if(a3 instanceof dog){

dog b3=(dog)a3;

b3.方法名();

}

内部类

1.内部类分为:成员内部类、静态内部类(方法构造时加static)、局部内部类(只在一定范围内作用,超出区域无法访问)、匿名内部类

2.访问时,内部类可以直接访问外部类中的成员,包括私有成员。访问方式:外部类名.this

但是外部类去访问内部类时必须要建立内部类的对象。

eg:成员内部类

//调用时主方法中

A p1=new A();

A.B b=p1.new B();

//

class A{

int a;

public void h(){

System.out,println("这是外部类");

}

class B{

public void c(){

System.out.println("这是内部类");

}

}

}

匿名内部类就是在调用时格式:new 外部类名或接口名(){
代码体(可自定义)
}

posted @   就叫清风吧  阅读(23)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示