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 外部类名或接口名(){
代码体(可自定义)
}

原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/274705.html

(0)
上一篇 2022年7月16日
下一篇 2022年7月16日

相关推荐

发表回复

登录后才能评论