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,调用该工具类的工具方法,并返回结果。

工具类:

java 复制代码
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;
    }
}

测试类:

java 复制代码
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,用这个关键字,我们可以让一个类和另一个类建立起继承关系。
java 复制代码
public class Student extends Person{}
  • Student称为子类(派生类),Person称为父类(基类或者超类)。

2.好处

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

3.什么时候用继承

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

4.继承的特点

java只支持单继承(一个爹),不支持多继承(好几个爹),但支持多层继承(子孙三代)。

每一个类都直接或者间接的继承于Object(爷爷)。

5.例子

1.Animal
java 复制代码
package a01loopextendsdemo1;

public class Animal {
    public void eat(){
        System.out.println("动物吃东西");
    }
    public void drink(){
        System.out.println("动物喝水");
    }
}
2.Cat
java 复制代码
package a01loopextendsdemo1;

public class Cat extends Animal{
    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}
3.Dog
java 复制代码
package a01loopextendsdemo1;

public class Dog extends Animal{
    public void lookHome(){
        System.out.println("狗看家");
    }
}
4.布偶猫
java 复制代码
package a01loopextendsdemo1;

public class Ragdoll extends Cat{

}
5.狸花猫
java 复制代码
package a01loopextendsdemo1;

public class LIHua extends Cat{
}
6.哈士奇
java 复制代码
package a01loopextendsdemo1;

public class Husky extends Dog{
    public void breakHoom(){
        System.out.println("哈士奇拆家");
    }
}
7.泰迪
java 复制代码
package a01loopextendsdemo1;

public class Teddy extends Dog{
    public void touch(){
        System.out.println("泰迪狗蹭来蹭去");
    }
}
8.测试类
java 复制代码
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();


    }
}
相关推荐
chen2017sheng6 分钟前
Spring Framework测试工具MockMvc介绍
java·后端·spring
灿灿的金14 分钟前
pip 与当前python环境版本不匹配,python安装库成功,还是提示没有该库
开发语言·python·pip
中东大鹅21 分钟前
Tomcat 目录结构和应用实现
java·tomcat·firefox
鹿说-23 分钟前
Spring基础01
java·spring
Aphelios38026 分钟前
Linux 权限系统和软件安装(二):深入理解 Linux 权限系统
java·linux·运维·服务器·tomcat
小黄人软件28 分钟前
C++ openssl AES/CBC/PKCS7Padding 256位加密 解密示例 MD5示例
开发语言·c++
姜来可期29 分钟前
Go Test 单元测试简明教程
开发语言·后端·学习·golang·单元测试
walkskyer36 分钟前
Golang `testing`包使用指南:单元测试、性能测试与并发测试
开发语言·golang·单元测试
JIU_WW1 小时前
Netty内置的空闲检测机制
java·服务器·前端·websocket·netty
飞升不如收破烂~1 小时前
WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口
开发语言