1、static 方法,可以被继承,不能被重写

package com.knowledge.myStatic;

/* 类变量
1、介绍:类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,
        任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个
        该类的对象去修改它时,修改的也是同一个变量

2、定义:访问修饰符 static 数据类型 变量名; (访问修饰符规则不变)
3、访问:类名.变量名 或 对象名.变量名

4、说明:
    1) 什么时候需要用类变量: 当我们需要让某个类的所有对象都共享一个变量时,可以考虑使用类变量
    2) 类变量与实例变量(对象属性)区别,类变量所有对象共享,实例变量是单个对象独有
    3) 加上static称为类变量或静态变量,否则称为普通变量/实例变量
    4) 实例变量不能通过 类名.变量名 来访问
    5) 类变量在类加载的时候就初始化
    6) 类变量的声明周期:随着类加载开始,到类消亡结束
 */

/* 类方法
    1、介绍: 类方法 也称为静态方法
    2、定义: 访问修饰符 static 数据返回类型 方法名(){}
    3、调用: 类名.方法名(参数)
    4、经典使用场景: 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率(例如 Math)
       即:往往将一些通用的方法设计成静态方法,这样不需创建对象就可以调用
 2、说明
    1) 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区
    2) 类方法中无this的参数,不可以用this,普通方法中可以使用(普通方法中隐藏着this的参数)
    3) 类方法可以通过类名和对象名调用;
    4) 普通方法和对象有关,只能通过对象名调用,不能使用类名调用
    5) 类方法中不能使用和对象相关的 this 和 super 关键字
    6) 类方法中 只能访问静态属性,或 静态方法 - 静态方法只能访问静态成员
    7) 普通成员方法,技能访问普通属性/方法,也可以访问静态变量/方法
 3、总结:
    静态方法,只能访问静态成员;非静态方法,可以访问静态成员和非静态成员(遵守访问权限)
 */
public class Mystatic {
    public static void main(String[] args) {

        // 通过类名.变量名访问
        // 说明:类变量是随着类的加载而创建的,所以即使没有实例化对象也能访问
        // 说明:类加载的时间:
        //  1.实例化对象时
        //  2.通过类名调用静态变量的时候(类名.class除外)
        System.out.println(A.name);


        // 类方法使用
        Student tom = new Student("tom");
        tom.payFee(100);

        Student marry = new Student("marry");
        marry.payFee(200);

        Student john = new Student("john");
        Student.payFee(300);

        Student.showFee();

    }
}

class Student{

    public String name;
    private static double fee=0;

    public Student(String name) {
        this.name = name;
    }

    public static void payFee(double fee){
        // 静态方法可以访问静态属性
        Student.fee += fee;
    }

    public static void showFee(){
        System.out.println("总费用: " + Student.fee);
    }
}

class A{

    // 定义一个类变量
    public static String name = "123";
}