【高中数学/函数/零点】求分段函数f(x)=x^2-4x+2(x>=1) f(x)=|lg(1-x)| (x<1)的零点个数

news2024/9/29 1:29:35

【问题】

已知分段函数f(x)=x^2+2x(当x<=0时),f(x)=|lgx|(当x>0时),则函数g(x)=f(1-x)-1的零点个数为几个?

【来源】

《高考数学极致解题大招》P137 变式训练第1题  中原教研工作室编著

【解答】

f(1-x)-1=0即f(1-x)=1

当1-x>0,即x<1时,f(1-x)=|lg(1-x)|=1

去掉绝对值符号有两种可能,lg(1-x)=1即x=-9   (此解满足x<1的条件故保留)

第二种可能是lg(1-x)=-1,即x=9/10  (此解满足x<1的条件故保留)

当1-x<=0即x>=1时,f(1-x)=(1-x)^2+2(1-x)=1,解得x1=2+根号2 (此解满足x>=1的条件故保留),x2=2-根号2 (此解不满足x>=1的条件故放弃)

综上,零点数目有三个,结合下图能看得更清晰:

【绘制函数图像的代码】

<!DOCTYPE html>
<html lang="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<head>
     <title>UNASSIGNED</title>
     <style type="text/css">
     .centerlize{
        margin:0 auto;
        border:0px solid red;
        width:1200px;height:600px;
     }
     </style>
     </head>

     <body οnlοad="draw();">
        <div class="centerlize">
            <canvas id="myCanvas" width="10px" height="10px" style="border:1px dashed black;">
                如果看到这段文字说您的浏览器尚不支持HTML5 Canvas,请更换浏览器再试.
            </canvas>
        </div>
     </body>
</html>
<script type="text/javascript">
<!--
/*****************************************************************
* 将全体代码拷贝下来,粘贴到文本编辑器中,另存为.html文件,
* 再用chrome浏览器打开,就能看到动画效果。
******************************************************************/

// 系统常量定义处
const TITLE="图一 f(x)=x^2-4x+2(x>=1) f(x)=|lg(1-x)| (x<1) 的图像 ";    // 图像标题
const WIDTH=1200;                    // 画布宽度
const HEIGHT=600;                    // 画布高度
const SCALE_UNIT=50;                 // 缩放比例 25对应x∈[-24,24],100对应x∈[-6,6]

// 系统变量定义处
var context=0;                        // 画布环境
var stage;                            // 舞台对象
var timeElapsed=0;                    // 动画运作的的时间
const TIME_END=100000;                // 动画运作的期限

//-------------------------------
// Canvas开始运作,由body_onload调用
//-------------------------------
function draw(){
    document.title=TITLE;

    // 画图前初始化
    var canvas=document.getElementById('myCanvas');    
    canvas.width=WIDTH;
    canvas.height=HEIGHT; 
    context=canvas.getContext('2d');  
    
    // 进行屏幕坐标系到笛卡尔坐标系的变换
    // 处置完成前,原点在左上角,向右为X正向,向下为Y的正向
    // 处置完毕后,原点移动到画布中央,向右为X正向,向上为Y的正向
    context.translate(WIDTH/2,HEIGHT/2);
    context.rotate(Math.PI);
    context.scale(-1,1);

    // 初始化舞台
    stage=new Stage();

    // 开始动画
    animate();
};

//-------------------------------
// 画图
//-------------------------------
function animate(){    
    timeElapsed+=1;// 时间每轮增加1

    stage.update(timeElapsed);
    stage.paintBg(context);
    stage.paint(context);

    if(timeElapsed<TIME_END){        
        window.requestAnimationFrame(animate);
    }
}

//-------------------------------
// 舞台对象定义处
//-------------------------------
function Stage(){
    // 内置对象(非必要勿更改)
    var obj=new Object;

    // 对象下的曲线数组(非必要勿更改)
    obj.curves=[];

    // 塞入曲线1(按需修改设定项)
    obj.curves.push({
        name:"曲线:f(x)=x^2-4x+2(x>=1) f(x)=|lg(1-x)| (x<1)",
        xEnd:5,
        x:-12,
        y:0,
        setY:function(x){
            
            
            if(x>1){
                this.y=x*x-4*x+2;// 解析式

                let coord={"x":x,"y":this.y};    

                this.pts0.push(coord);
            }else{
                this.y=Math.abs(Math.log(1-x)/Math.log(10))-1;// 解析式

                let coord={"x":x,"y":this.y};    
                this.pts1.push(coord);
            }
        },
        "pts0":[],
        "pts1":[],
    });
                            
    // 随时间更新位置(非必要勿更改)
    obj.update=function(t){
        for(var i=0;i<this.curves.length;i++){
            var curve=this.curves[i];

            if(curve.x<curve.xEnd){
                curve.x+=0.01;
                curve.setY(curve.x);
            }
        }
    };

    // 画前景
    obj.paint=function(ctx){  
        // 手动标记点
        paintPoint(ctx,-9,0,"a","navy");
        paintPoint(ctx,9/10,0,"b","navy");
        paintPoint(ctx,2+Math.sqrt(2),0,"c","navy");

        // 文字左上角位置(可手动修改设定值)
        const X_START=-230;    // 文字横起点
        const Y_START=150;    // 文字纵起点
        const OFFSET=50;    // 文字间隔
        // 遍历曲线数组(非必要勿更改)
        for(var i=0;i<this.curves.length;i++){
            var curve=this.curves[i];
            var color=getColor(i);

            // 曲线名称
            drawText(ctx,curve.name,X_START,Y_START-i*OFFSET,color,18);
            // 曲线当前点坐标
            drawText(ctx,"当前 X:"+curve.x.toFixed(3)+"  Y:"+curve.y.toFixed(3),X_START,Y_START-20-(i)*OFFSET,color,18);
            
            // 绘制曲线
            if(curve.pts0){
                paintCurve(ctx,color,curve.pts0);
                
                // 绘制曲线分段1的高低点(可选)
                //var mm=findMaxMin(curve.pts0);
                //markMaxMin(ctx,mm,color);
            }
            if(curve.pts1){
                paintCurve(ctx,color,curve.pts1);
                // 绘制曲线分段2的高低点(可选)
                //var mm=findMaxMin(curve.pts1);
                //markMaxMin(ctx,mm,color);
            }
            if(curve.pts2){
                paintCurve(ctx,color,curve.pts2);
                // 绘制曲线分段3的高低点(可选)
                var mm=findMaxMin(curve.pts2);
                markMaxMin(ctx,mm,color);
            }
            if(curve.pts3){
                paintCurve(ctx,color,curve.pts3);
                // 绘制曲线分段4的高低点(可选)
                var mm=findMaxMin(curve.pts3);
                markMaxMin(ctx,mm,color);
            }
            if(curve.pts4){
                paintCurve(ctx,color,curve.pts4);
                // 绘制曲线分段4的高低点(可选)
                var mm=findMaxMin(curve.pts3);
                markMaxMin(ctx,mm,color);
            }
        }
    };

    // 画背景(非必要不更改)
    obj.paintBg=function(ctx){
        // 清屏
        ctx.clearRect(-600,-300,1200,600);
        ctx.fillStyle="rgb(251,255,253)";
        ctx.fillRect(-600,-300,1200,600);

        // 画X轴
        drawAxisX(ctx,-600,600,50);

        // 画Y轴
        drawAxisY(ctx,-300,300,50);

        // 画网格线
        drawGrid(ctx,-600,-300,50,1200,600,50);
        
        // 左上角标题
        var metrics = ctx.measureText(TITLE);
        var textWidth = metrics.width;
        drawText(ctx,TITLE,-WIDTH/2+textWidth+3,HEIGHT/2-30,"grey",18);

        // 右下角作者,日期
        const waterMarkTxt="逆火原创@"+(new Date()).toLocaleDateString();
        metrics = ctx.measureText(waterMarkTxt);
        textWidth = metrics.width;
        drawText(ctx,waterMarkTxt,WIDTH/2-textWidth,-HEIGHT/2,"lightGrey",16);
    };
    
    return obj;
}

// 描绘并标识一个点
function paintPoint(ctx,x,y,text,color){
    var xReal=x*SCALE_UNIT;
    var yReal=y*SCALE_UNIT;

    ctx.strokeStyle=color;
    ctx.lineWidth=0.5;

    // 划线
    ctx.save();
    ctx.setLineDash([5,5]);
    ctx.beginPath();    
    ctx.moveTo(xReal,0);
    ctx.lineTo(xReal,yReal);
    ctx.lineTo(0,yReal);
    ctx.stroke();
    ctx.restore();

    // 画圈
    ctx.beginPath();
    ctx.arc(xReal,yReal,4,0,Math.PI*2,false);
    ctx.closePath();    
    ctx.stroke();

    // 写文字
    var metrics = ctx.measureText(text);
    var textWidth = metrics.width;
    drawText(ctx,text,xReal+textWidth+2,yReal-5,color,12);
}

// 连点成线画曲线
function paintCurve(ctx,color,cds){
    ctx.save();
    ctx.strokeStyle = color;
    ctx.lineWidth=1;

    ctx.beginPath();     
    for(var i=0; i<cds.length; i++){
        let y=cds[i].y;
        if(Math.abs(cds[i].y*SCALE_UNIT)<300){
            ctx.lineTo(cds[i].x*SCALE_UNIT,cds[i].y*SCALE_UNIT);
        }
    }     
    ctx.stroke();  
    ctx.restore();
}

// 找到坐标数组的最大最小值
function findMaxMin(cds){
    if(cds.length<1){
        return null;
    }

    var retval={max:-10000,max_x:0,min:10000,min_x:0};

    for(var i=0;i<cds.length;i++){
        var y=cds[i].y;

        if(y>retval.max){
            retval.max=y;
            retval.max_x=cds[i].x;
        }

        if(y<retval.min){
            retval.min=y;
            retval.min_x=cds[i].x;
        }
    } 

    return retval;
}

// 绘出最大最小值
function markMaxMin(ctx,mm,color){
    if(mm==null){
        return;
    }

    // 最大值
    var x=mm.max_x;
    var y=mm.max;
    ctx.strokeStyle=color;
    ctx.beginPath();
    ctx.arc(x*SCALE_UNIT,y*SCALE_UNIT,5,0,Math.PI*2,false);
    ctx.closePath();
    ctx.stroke();
    var text="max@x="+x.toFixed(3)+" y="+y.toFixed(3);
    drawText(ctx,text,x*SCALE_UNIT,y*SCALE_UNIT,color,12);

    // 最小值
    var x=mm.min_x;
    var y=mm.min;
    ctx.strokeStyle=color;
    ctx.beginPath();
    ctx.arc(x*SCALE_UNIT,y*SCALE_UNIT,5,0,Math.PI*2,false);
    ctx.closePath();
    ctx.stroke();
    var text="min@x="+x.toFixed(3)+" y="+y.toFixed(3);
    drawText(ctx,text,x*SCALE_UNIT,y*SCALE_UNIT,color,12);
}

// 定点画实心圆
function drawSolidCircle(ctx,x,y,r,color){
      ctx.save();
      ctx.beginPath();
      ctx.arc(x,y,r,0,2*Math.PI);
      ctx.fillStyle=color;
      ctx.fill();
      ctx.restore();
}

// 两点之间画线段
function drawLine(ctx,x1,y1,x2,y2,color){
    ctx.save();
    ctx.lineWidth=0.25;
    ctx.strokeStyle=color;
    ctx.beginPath();
    ctx.moveTo(x1,y1);
    ctx.lineTo(x2,y2);
    ctx.stroke();
    ctx.closePath();
    ctx.restore();
}

// 画横轴
function drawAxisX(ctx,start,end,step){
    const AXISY_COLOR="black";

    ctx.save();
    
    ctx.lineWidth=0.5;
    ctx.strokeStyle=AXISY_COLOR;

    // 画轴
    ctx.beginPath();
    ctx.moveTo(start, 0);
    ctx.lineTo(end, 0);
    ctx.stroke();
    ctx.closePath();

    // 画箭头
    ctx.beginPath();
    ctx.moveTo(end-Math.cos(getRad(15))*10, Math.sin(getRad(15))*10);
    ctx.lineTo(end, 0);
    ctx.lineTo(end-Math.cos(getRad(15))*10, -Math.sin(getRad(15))*10);
    ctx.stroke();
    ctx.closePath();
    
    // 画刻度
    var x,y;
    y=5;
    for(x=start;x<end;x+=step){
        if(x==0){
            continue;
        }

        ctx.beginPath();
        ctx.moveTo(x, 0);
        ctx.lineTo(x, y);
        
        ctx.stroke();
        ctx.closePath();

        var text=formatScale(x/SCALE_UNIT);
        drawText(ctx,text,x,y-20,AXISY_COLOR,12);
    }

    ctx.restore();
}

// 画纵轴
function drawAxisY(ctx,start,end,step){
    const AXISY_COLOR="black";
        
    ctx.save();
    
    ctx.lineWidth=0.5;
    ctx.strokeStyle=AXISY_COLOR;

    // 画轴
    ctx.beginPath();
    ctx.moveTo(0, start);
    ctx.lineTo(0, end);
    ctx.stroke();
    ctx.closePath();

    // 画箭头
    ctx.beginPath();
    ctx.moveTo(Math.sin(getRad(15))*10, end-Math.cos(getRad(15))*10);
    ctx.lineTo(0, end);
    ctx.lineTo(-Math.sin(getRad(15))*10, end-Math.cos(getRad(15))*10);
    ctx.stroke();
    ctx.closePath();
    
    // 画刻度
    var x,y;
    x=5;
    for(y=start;y<end;y+=step){
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.lineTo(0, y);
        
        var text=formatScale(y/SCALE_UNIT);
        var metrics = ctx.measureText(text);
        var textWidth = metrics.width;
        drawText(ctx,text,x-textWidth-5,y,AXISY_COLOR,12);

        ctx.stroke();
        ctx.closePath();
    }

    ctx.restore();
}

//-------------------------------
// 得到整型后的刻度
//-------------------------------
function formatScale(scale){
    var s=scale*10;
    if(s % 5==0){
        return scale+"";
    }else{
        return scale.toFixed(2);
    }
}

// 画网格线
function drawGrid(ctx,x1,y1,step1,x2,y2,step2){
    ctx.save();
    
    ctx.lineWidth=0.25;
    ctx.strokeStyle="lightgrey";    

    // 分十格
    var x,y;
    for(x=x1;x<x2;x+=step1/10){
        ctx.beginPath();
        ctx.moveTo(x, y1);
        ctx.lineTo(x, y2);
        ctx.stroke();
        ctx.closePath();
    }

    for(y=y1;y<y2;y+=step2/10){
        ctx.beginPath();
        ctx.moveTo(x1, y);
        ctx.lineTo(x2, y);
        ctx.stroke();
        ctx.closePath();
    }

    // 十小格间的分割线
    ctx.lineWidth=0.25;
    ctx.strokeStyle="grey";
    ctx.setLineDash([5,5]);// 设置虚线,起止点间包含五空格五划线共十段

    for(x=x1;x<x2;x+=step1){
        ctx.beginPath();
        ctx.moveTo(x, y1);
        ctx.lineTo(x, y2);
        ctx.stroke();
    }

    for(y=y1;y<y2;y+=step2){
        ctx.beginPath();
        ctx.moveTo(x1, y);
        ctx.lineTo(x2, y);
        ctx.stroke();
    }

    ctx.restore();
}

//-------------------------------
// 角度得到弧度
//-------------------------------
function getRad(degree){
    return degree/180*Math.PI;
}

//-------------------------------
// 得到颜色
//-------------------------------
function getColor(index){
    var arr=[
        "maroon" /* 栗色 */,
        "orange" /* 橙色 */,
        "blue"   /* 蓝色 */,
        "green"  /* 绿色 */,       
        "fuchsia"/* 紫红 */,        
        "grey"   /* 灰色 */,
        "lime"   /* 酸橙 */,        
        "navy"   /* 海蓝 */,        
        "purple" /* 紫色 */,
        "skyblue"/* 天蓝 */,
        "teal"   /* 蓝绿 */,
        "yellow" /* 亮黄 */,
        "aqua"   /* 湖绿 */,
        "red"    /* 红色 */,        
        "black"  /* 黑色 */,    
    ];

    return arr[index % arr.length];
}

//-------------------------------------
// 绘制文字,指定颜色
// ctx:绘图环境
// text:文字
// x,y:坐标
// color:颜色
// size:字体大小
//-------------------------------------
function drawText(ctx,text,x,y,color,size){
    ctx.save();
    ctx.translate(x,y)
    ctx.rotate(getRad(180))
    ctx.scale(-1,1)

    ctx.textBaseline="bottom";
    ctx.textAlign="center";
    ctx.fillStyle=color;
    ctx.font = size+"px consolas";

    ctx.fillText(text,0,0);
    ctx.restore();
}

// JS开立方
function kaiLiFang(x){
    if(x>0){
        return Math.pow(x,1/3);
    }else{
        return -Math.pow(-x,1/3);
    }
}
//-->
/****************************************
遇到事情,要学会沉住气,在默默无闻中积攒
力量,等待厚积薄发的一天。
****************************************/
</script>

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决

遍历9个格子winmine!StepBlock和遍历8个格子winmine!StepBox的对决 第一部分&#xff1a;windbg调试记录。 0: kd> g Breakpoint 10 hit winmine!DoButton1Up: 001b:0100390e a130510001 mov eax,dword ptr [winmine!xCur (01005130)] 0: kd> kc # 00 winmine…

基于JAVA+SpringBoot+Vue的健身房管理系统1

基于JAVASpringBootVue的健身房管理系统1 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽…

element ui中当el-dialog需要做全屏时,.fullscreen样式修改问题

element ui 饿了么UI中el-dialog样式修改问题 场景解决方法就是&#xff1a;去掉底部样式中的scoped,然后再进行页面级样式的更改即可。 场景 最近在使用element-ui时&#xff0c;使用到了弹窗组件&#xff1a; element-ui 官网链接地址&#xff1a; element-ui 官网链接地址…

C语言指针系列1——初识指针

祛魅&#xff1a;其实指针这块儿并不难&#xff0c;有人说难只是因为基础到进阶没有处理好&#xff0c;大家要好好跟着一步一步学习&#xff0c;今天我们先来认识一下指针 指针定义&#xff1a;指针就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一…

Java线程的三大特性

原子性: 线程任务不可再分。 int i 1; i; 原子类 AtomicXXX 可见性: 线程之间的操作是互相不可见的。 volatile //线程A如果&#xff0c;flag为true&#xff0c;就运行打印语句 A: trueThread t1 new Thread(() -> {while (true) {if (flag) {System.out.println(&q…

卷积神经网络-迁移学习

文章目录 一、迁移学习1.定义与性质2.步骤 二、Batch Normalization&#xff08;批次归一化&#xff09;三、ResNet网络1.核心思想2.残差结构&#xff08;1&#xff09;残差块&#xff08;2&#xff09;残差结构类型 四、总结 一、迁移学习 迁移学习&#xff08;Transfer Lear…

zabbix基本概念与组件

文章目录 一、zabbix简介二、​​​​​​​zabbix构成三、​​​​​​​zabbix监控对象四、​​​​​​​zabbix常用术语五、 Zabbix 6.0 新特性1.Zabbix server高可用防止硬件故障或计划维护期的停机2.Kubernetes系统从多个维度采集指标 六、zabbix 工作原理1、主动模式2、…

操作配置笔记

一、检查&#xff1a; 1.查看当前配置 display current-configuration 2.查看路由表 display ip routing-table 3.查看当前配置情况 display this 4.查看当前设备版本 display version 5.查看接口 display interface display ip interface 6.查看保存的当前配置 display sav…

openinstall鸿蒙SDK再升级,功能全面支持HarmonyOS NEXT

万众期待的鸿蒙操作系统HarmonyOS NEXT即将发布&#xff0c;国产自主的全场景智能操作系统诞生&#xff0c;将为生态伙伴共创共享创造新蓝海&#xff0c;鸿蒙生态的加速构建&#xff0c;也有望催生出互联网生态的第三极。 作为首批鸿蒙生态伙伴&#xff0c;openinstall在App渠…

AR 眼镜之-蓝牙电话-来电铃声与系统音效

目录 &#x1f4c2; 前言 AR 眼镜系统版本 蓝牙电话 来电铃声 系统音效 1. &#x1f531; Android9 原生的来电铃声&#xff0c;走的哪个通道&#xff1f; 2. &#x1f4a0; Android9 原生的来电铃声&#xff0c;使用什么播放&#xff1f; 2.1 来电铃声创建准备 2.2 来…

C语言指针系列2——加深理解

大家&#xff0c;今天讲的知识点是一块儿一块儿的&#xff0c;所以大家要好好学习喔~ 话不多说&#xff0c;开始正题 关键字&#xff1a;const &#xff08;三种用法&#xff09; 1. int* const p; 2. int const* p; 3. const int* const p; 首先我们要了解一下const&#xff…

828华为云征文|使用Flexus X实例安装宝塔面板教学

目录 一、Flexus X实例简介 1.1 概述 1.2 产品规格 二、切换操作系统 2.1 Huawei Cloud EulerOS 2.0 标准版 2.2 切换镜像 三、部署宝塔面板 3.1 安装宝塔面板 3.2 放通安全组规则 3.3 登录宝塔面板 四、使用感受 4.1 柔性算力随心配 4.2 一直加速一直快 4.3 越用…

C++之分割字符串的两种方式

方式一 #include <string> #include <vector> #include <sstream> #include <iostream>std::vector<std::string> split(const std::string& str, char delim) {std::stringstream ss(str);std::string item;std::vector<std::string>…

防火墙-CentOS7-firewalld

文章目录 一、防火墙以及Linux防火墙服务介绍什么是防火墙&#xff0c;有什么用防火墙的结构防火墙的作用为什么需要防火墙防火墙何时需要开启防火墙何时可以关闭名词什么是入站&#xff1f;出站 Linux防火墙发展历程1. 初期阶段2. iptables的出现3. 发展与扩展4. nftables的引…

Codeforces Round 592 (Div. 2) C题 The Football Season(Exgcd)

题目链接 https://codeforces.com/problemset/problem/1244/C 思路 其实就是要求 a x b y c axbyc axbyc的一组 x y xy xy的最小整数解。因为题目保证了 a > b a>b a>b&#xff0c;所以只需要使得 y y y最小即可。 我们对 a x b y c axbyc axbyc推导得到&…

jmeter断言---响应断言

请求http://www.baidu.com 检查&#xff1a;让程序检查响应数据中是否包含“百度一下&#xff0c;你就知道” 操作步骤&#xff1a; 1.添加线程组 2.添加http请求 3.添加断言&#xff08;需要在http请求下添加断言&#xff0c;而且可以根据断言测试字段等信息新建不同的断…

黑盒测试与白盒测试总结

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 黑盒测试与白盒测试是软件测试中两种不同的测试方法&#xff0c;它们的主要区别在于测试者对被测试软件的了解程度。下面&#xff0c;我们将详细介绍这两种测试方…

Windows大幅提高内存使用率,大幅减少内存占用率

事情原因&#xff1a;在笔记本16G内存使用生产力工具不够用的情况下&#xff0c;我把内存条加到了32G&#xff0c;开始的时候是好的&#xff0c;后来打开个IDEA&#xff0c;居然占用了80%的内存&#xff0c;其实IDEA也就占了4G内存&#xff0c;后经过查阅资料后得出了解决办法……

Fabric V2.5 通用溯源系统——使用Hyperledger Caliper压力测试

Hyperledger Caliper 0.6.0 是一款测试区块链性能的工具,支持Hyperledger Fabric、Ethereum等,支持丰富的测试配置参数,测试完成后将直接输出报告,相较于tape更加专业,但是配置稍微有些复杂。本文将一步一步配置Caliper以测试Fabric V2.5 通用溯源系统中的注册用户、查询用…

Java语法-类和对象之继承与多态(中)

1. 继承 为什么要继承? 从生物学角度来说,继承就是把父辈的基因遗传给子代,然后子代再在细胞分裂的途中产生变异,生成比父辈更加适应环境的物种.其中很重要的就是继承给子代的基因(父类的方法和属性)和子代在父辈的基础上产生的变异(方法的重写). 比如猫和狗都是哺乳动物,是在…