Java基础-面向对象进阶-static,继承-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Java基础-面向对象进阶-static,继承

static

静态变量

  • 特点:
    • 被该类所有对象共享
    • 不属于对象, 属于类
    • 随着类的加载而加载, 优先于对象存在
  • 调用方式:
    • 类名调用(推荐)
    • 对象名调用

静态方法和工具类

  • 特点:
    • 多用在测试类和工具类中
    • JavaBean类中很少会用
  • 调用方式:
    • 类名调用(推荐)
    • 对象名调用
// 数组工具类
import java.util.StringJoiner;

public class ArrayUtil {
    private ArrayUtil(){}

    public static String printArr(int[] nums) {
        StringJoiner sj = new StringJoiner(", ", "[", "]");
        for (int i = 0; i < nums.length; i++) {
            sj.add(nums[i]+"");
        }
        return sj.toString();
    }

    public static double getAerage(double[] nums){
        double ret = 0;
        for (int i = 0; i < nums.length; i++) {
            ret += nums[i];
        }
        return ret/nums.length;
    }
}

// 学生工具类
import java.util.ArrayList;

public class StudentUtil {
    private StudentUtil(){}

    public static int getMaxAge(ArrayList<Student> students){
        int ret = 0;
        for (int i = 0; i < students.size(); i++) {
            ret = Math.max(ret, students.get(i).getAge());
        }
        return ret;
    }
}

static的注意事项

  • 静态方法中, 只能访问静态
  • 非静态方法可以访问所有方法
  • 静态方法中没有this关键字

重新认识main方法

  • public: 被JVM调用, 访问权限要足够大
  • static:
    • 被JVM调用, 不用创建对象, 直接类名访问
    • 因为main方法是静态的, 所有测试类中其他方法也需要是静态的
  • void: 被JVM调用, 不需要给JVM返回值
  • main: 一个通用的名称, 虽然不是关键字, 但是被JVM识别
  • String[] args: 以前用于接收键盘录入数据, 现在没用

继承

继承的概述

  • 什么是继承、继承的好处
    继承是面向对象三大特征之一可以让类跟类之间产生子父的关系。
    可以把多个子类中重复的代码抽取到父类中子类可以直接使用减少代码冗余提高代码的复用性
  • 继承的格式
    public class 子类 extends 父类 
    
  • 继承后子类的特点
    子类可以得到父类的属性和行为子类可以使用子类可以在父类的基础上新增其他功能子类更强大

继承的特点

  • Java只能单继承: 一个类只能继承一个直接父类
  • Java不支持多继承, 但是支持多层继承
  • Java中所有的类都直接或者间接继承于Object类
  • 子类只能访问父类中非私有的成员

子类继承的内容

  • 父类的构造方法不能被子类继承
  • 父类的成员变量都能被子类继承, 但是私有的成员变量不能被调用
  • 父类的成员方法在虚方法表中的能继承, 不在的不能继承(虚方法指的是非private, 非static, 非final)

子类继承内容的访问特点

成员变量访问特点

  • 就近原则: 先在局部位置找, 本来成员位置找, 父类成员位置找, 逐级往上
  • 成员变量重名
    • name: 从局部位置往上找
    • this.name: 从本类成员位置往上找
    • super.name: 从父类成员位置往上找
public class demo {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

class Fu{
    String name = "Fu";
    String hobby = "喝茶";
}

class Zi extends Fu{
    String name = "Zi";
    String game = "吃鸡";

    public void show(){
        // 打印Zi
        System.out.println(name);
        System.out.println(this.name);
        // 打印Fu
        System.out.println(super.name);
        // 打印喝茶
        System.out.println(hobby);
        System.out.println(this.hobby);
        System.out.println(super.hobby);
        // 打印吃鸡
        System.out.println(game);
        System.out.println(this.game);
    }
}

成员方法访问特点

  • 成员方法访问特点 同 成员变量访问特点
  • 方法重写注意事项和要求
    • @Override: 校验重写是否正确, 同时可读性好
    • 重写方法的名称、形参列表必须与父类中的一致。
    • 子类重写父类方法时访问权限子类必须大于等于父类 (暂时了解:空着不写< protected< public)
    • 子类重写父类方法时返回值类型子类必须小于等于父类
    • 建议:重写的方法尽量和父类保持一致。
    • 只有被添加到虚方法表中的方法才能被重写

构造方法访问特点

  • 子类不能继承父类的构造方法, 但是可以通过super调用
  • 子类构造方法的第一行, 有一个默认的super()
  • 默认先访问父类中无参的构造方法, 再执行自己
  • 如果想访问父类有参构造, 必须手动书写

来源

黑马程序员. 阿玮Java零基础

Gitee地址

https://gitee.com/yu-ba-ba-ba/awJava

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java