当前位置: 首页 > news >正文

java后端开发day20--面向对象进阶(一)--static继承

在这里插入图片描述
(以下内容全部来自上述课程)
在这里插入图片描述

1.static–静态–共享

static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量。

1.静态变量

被static修饰的成员变量,叫做静态变量。
特点:

  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

调用方式:

  • 类名调用(推荐)
  • 对象名调用

2.静态方法

被static修饰的成员方法,叫做静态方法。
特点:

  • 多用在测试类和工具类中
  • javabean类中很少会用

调用方法:

  • 类名调用(推荐)
  • 对象名调用

3.static内存图

静态变量是随着类的加载而加载的,优先于对象出现的。请添加图片描述

4.工具类

JavaBean类:用来描述一类事物的类。
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。

1.规则:
  • 类名见名知意
  • 私有化构造方法
  • 方法定义为静态
2.练习:

需求:在实际开发中,经常会遇到一些数组使用的工具类。
请按照如下要求编写一个数组的工具类:ArrayUtil

  • 提供一个工具类方法printArr,用于返回整数数组的内容。
    返回的字符串格式如:[10,20,50,34,100](只考虑整数数组,且只考虑一维数组)

  • 提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮点型数组,且只考虑一维数组)

  • 定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。

工具类:

package a02staticdemo2;

public class ArrayUtil {

    //私有构造方法
    //目的:是不让其他类创建本类对象
    private ArrayUtil(){}

    //需要定义为静态的,方便调用
    public static String printArr(int[] arr){
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1){
                sb.append(arr[i]);
            }else{
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");
        String s = sb.toString();
        return s;
    }

    //返回平均值
    public static double getAvg(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        int avg = sum / arr.length;
        return avg;
    }
}

测试类:

package a02staticdemo2;

public class TestDemo {
    public static void main(String[] args) {
        //测试工具类中的两个方法是否正确
        int[]arr = {1,2,3,4,5};
        double avg = ArrayUtil.getAvg(arr);
        System.out.println(avg);
        String s = ArrayUtil.printArr(arr);
        System.out.println(s);
    }
}

5.注意事项

  • 静态(公有)方法中,只能访问静态。
  • 非静态(私有)方法可以访问所有。
  • 静态方法中没有this关键字。(非静态中存在隐藏this,在形参之前,由虚拟机赋值)

2.继承

面向对象的三大特征:封装、继承、多态。
封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为。

1.定义

  • java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。
public class Student extends Person{}
  • Student称为子类(派生类),Person称为父类(基类或者超类)。

2.好处

  • 可以把多个子类中重复的代码抽取到父类中,提高了代码的复用性。
  • 子类可以在父类的基础上,增加其他的功能,使子类更强大。

3.什么时候用继承

当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码。

4.继承的特点

java只支持单继承(一个爹),不支持多继承(好几个爹),但支持多层继承(子孙三代)。
每一个类都直接或者间接的继承于Object(爷爷)。

5.例子

请添加图片描述

1.Animal
package a01loopextendsdemo1;

public class Animal {
    public void eat(){
        System.out.println("动物吃东西");
    }
    public void drink(){
        System.out.println("动物喝水");
    }
}

2.Cat
package a01loopextendsdemo1;

public class Cat extends Animal{
    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}

3.Dog
package a01loopextendsdemo1;

public class Dog extends Animal{
    public void lookHome(){
        System.out.println("狗看家");
    }
}

4.布偶猫
package a01loopextendsdemo1;

public class Ragdoll extends Cat{

}

5.狸花猫
package a01loopextendsdemo1;

public class LIHua extends Cat{
}

6.哈士奇
package a01loopextendsdemo1;

public class Husky extends Dog{
    public void breakHoom(){
        System.out.println("哈士奇拆家");
    }
}

7.泰迪
package a01loopextendsdemo1;

public class Teddy extends Dog{
    public void touch(){
        System.out.println("泰迪狗蹭来蹭去");
    }
}

8.测试类
package a01loopextendsdemo1;

public class Test {
    public static void main(String[] args) {
        //创建对象并调用方法

        //1.创建布偶猫的对象
        Ragdoll ragdoll = new Ragdoll();
        ragdoll.eat();
        ragdoll.drink();

        //2.创建狸花猫的对象
        LIHua liHua = new LIHua();
        liHua.eat();

        //3.创建哈士奇的对象
        Husky husky = new Husky();
        husky.eat();
        husky.drink();


    }
}

相关文章:

  • C# Unity 唐老狮 No.1 模拟面试题
  • 在Linux环境下利用MTCNN进行人脸检测(基于ncnn架构)
  • ARM Coretex-M核心单片机(STM32)分析hardfault的原因
  • Spring如何解决循环依赖?
  • CCF-CSP历年真题大全附题解python
  • 矩阵的奇异值(SVD)分解和线性变换
  • DeepSeek推出DeepEP:首个开源EP通信库,让MoE模型训练与推理起飞!
  • FastJSON 默认行为:JSON.toJSONString 忽略 null 字段
  • python 使用 venv 创建虚拟环境 (VSCode)
  • 关于命令行下的 git( git add、git commit、git push)
  • 字符串_替换数字
  • 蓝桥每日打卡
  • HBase与MapReduce结合(一)——HBase表中插入数据
  • Ubuntu 下 nginx-1.24.0 源码分析 - pool->cleanup
  • 半导体制造工艺(二)光刻工艺—掩模版
  • SpringAI从人工智障到人工智能的实战改造
  • 人工智能时代:Python学习的全面攻略路线图
  • 二分法 ──── 算法3
  • JAVA实战开源项目:靓车汽车销售网站(Vue+SpringBoot) 附源码
  • 安装floodlight
  • 证据公布!菲律宾6人非法登上铁线礁活动
  • 深入贯彻中央八项规定精神学习教育中央指导组培训会议召开
  • 4月人文社科联合书单|天文学家的椅子
  • 西班牙葡萄牙遭遇史上最严重停电:交通瘫了,通信崩了,民众疯抢物资
  • 西班牙遭遇史上最严重停电,已进入国家紧急状态
  • 金融创新破局记:中小微企业转型背后的金融力量