static
static可以修饰成员变量,也可以修饰成员方法,是Java中的一个修饰符。

被static修饰的成员变量叫静态变量:
1)特点:它被类所有对象共享;加载时随类一起加载,优先于对象的加载。
2)调用方式:类名.静态变量 或者 类的对象名.静态变量

被static修饰的成员方法叫静态方法:
1)特点:多用在测试类或工具类中,JavaBean类中很少使用、
2)调用方式:类名.方法名 或 类的对象名.方法名

封装
对象代表什么,就封装对应的数据并提供相应的行为。如Student类中 定义 姓名、年龄、学习的行为。

继承
当类与类直接存在相同的内容,并且子类是父类中的一种,就可以考虑使用继承。使用 extends 关键字,格式:

public class 子类 extends 父类 {}

继承的好处:将多个子类中重复的代码抽取到父类中,减少代码冗余,子类可直接使用,提高代码复用性

继承后子类的特点:子类可使用父类中的属性和行为,也可在父类的基础上新增其他行为,使功能更强大

继承的特点:只支持单继承(一个子类只能继承一个父类),不支持多继承(一个子类继承多个父类),但支持多层继承(A继承B,B继承C);所有的类都直接或间接继承Object类;子类只能访问父类中非私有的成员;子类不能继承父类的构造方法,能继承私有和非私有的成员变量,只能继承非private、非static、非final修饰的成员方法

继承中成员方法的访问特点:就金原则,出现重名的从本类开始往上找

继承中成员方法的访问特点:就近原则,super访问父类中的方法,子类可重写父类的方法。重写要求:方法名、形参与父类一致;访问权限大于等于父类;返回值类型小于等于父类

继承中构造方法的访问特点:父类的构造方法不能被继承,可通过super访问;子类构造方法的第一行有一个默认的super(),默认先访问父类的无参构造方法,再执行自己;想要访问父类的有参构造,需写super括号中的参数。

示例:

public class FuZiTest2 {
    public static void main(String[] args) {
        System.out.println("------创建cat对象------");
        Cat cat = new Cat();
        System.out.println("------cat对象的show方法------");
        cat.show();
        System.out.println("------cat对象的eat方法------");
        cat.eat();

        System.out.println("------创建cat2对象-----");
        Cat cat2 = new Cat("happy");
        System.out.println(cat2.getName());

        System.out.println("------创建animal对象------");
        Animal animal = new Animal();
        System.out.println("------animal对象的eat方法------");
        animal.eat(); //eat food
    }
}

class Animal {
    String nikeName = "animal";
    String name;
    
    public void eat(){
        System.out.println("eat food");
    }

    public Animal() {
        System.out.println("Animal的无参构造方法");
    }
    
    public Animal(String name) {
        this.name = name;
        System.out.println("Animal的有参构造方法,name值是:" + name);
    }
}

class Cat extends Animal {
    String nikeName = "cat";

    public void show() {
        String nikeName = "orange cat";
        System.out.println(nikeName); //orange cat
        System.out.println(this.nikeName); //cat
        System.out.println(super.nikeName); //animal
    }

    @Override
    public void eat() {
        super.eat(); //eat food
        System.out.println("eat fish"); //eat fish
    }

    public  Cat(){
        super(); //可不写
        System.out.println("Cat的无参构造方法");
    }

    public Cat(String name) {
        super(name);
    }

    public String getName() {
        return name;
    }
}

结果:

------创建cat对象------
Animal的无参构造方法
Cat的无参构造方法
------cat对象的show方法------
orange cat
cat
animal
------cat对象的eat方法------
eat food
eat fish
------创建cat2对象-----
Animal的有参构造方法,name值是:happy
happy
------创建animal对象------
Animal的无参构造方法
------animal对象的eat方法------
eat food