static&继承


static

  一、static的作用

    1.修饰变量:一个类中的变量用static修饰后为这个类的所有对象公用

           静态变量是随着类的加载而加载的,优先于对象出现的

    2.修饰方法:被static修饰的成员方法,多用于测试类和工具类中

           在目前的开发中没有什么实际意义

    用private修饰类,不让外界创建其对象

  

  二、工具类

    1.用于处理数据的类,最好用private修饰

    2.this表示当前方法调用者的地址值,由虚拟机赋值

    3.当一个对象去调用方法时,这个对象的地址值会被自动传入方法中

    4.但是静态方法在调用时,不会自动传入地址值。

    5.所以静态方法只能访问静态的东西(不能访问如成员变量,成员方法等)


继承

  一、引入

    当两个类有共同的属性时,可以通过新建父类,然后继承给子类

    比如Person类继承给Student和Teacher

    用extends关键字

    public class Student extends Person {}

    Student称为子类,Person称为父类

  二、使用继承结构的好处

    1.提供代码的复用性

    2.子类可以在父类的基础上增加功能

  三、什么时候使用继承

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

  四、举例

     // Manager:姓名,工具,管理奖金

    // Coder:姓名,工资

        可以定义父类:Employ

     // Coder:id,名字,年龄

     // Phone:价格

        这时候就不能定义Goods,因为Coder不是商品,不能写继承结构!

  五、特点

    1.Java只能支持单继承,不支持多继承,但支持多层继承

    ps.如果两个父类都有同一个方法,那就会出错,所以不能多继承

    2.每一个类都直接或间接的继承于object类,这是所有类的父类或间接父类

  六、有什么事是够继承下来的

类中的元素Publicprivate
构造方法NONO
成员变量YESYES
成员方法YESNO

值得注意的是,private修饰的成员变量被子类继承之后也需要对应的get和set方法才能修改,因为其本身也是private属性

这里有一个误区:子类只能访问父类中非private的项目,这是错误的

同时有一点需要注意:只有虚方法(非private,static,final标记的方法)才能被继承

继承中的特点:

一、成员变量的访问特点

  1.就近原则:谁离我近,我就用谁

         假如在子类中有一个方法调用name,优先在方法中找寻变量

         可以使用this在子类中查找变量,或者使用super在父类中找寻变量

  2.最多只能调用到super,再往上会报错

  3.如果调用不到,就会一直往上查找。

二、成员方法的访问特点

  1.就近原则

  2.this调用子类,super调用父类

  3.方法的重写:

      当父类的方法不能满足子类现在的需求时,需要对方法进行重写

      在继承体系中,子类出现了和父类中一样的方法,则称子类的这个方法为重写方法

      需要在重写方法前加上@Override注解,以便于虚拟机检查重写方法的语法正确性

         1.重写方法的名称,形参列表必须与分类中的一致

         2.子类重写父类方法时,访问权限子类必须大于等于父类

         3.子类重写父类方法时,返回值类型子类必须小于等于父类

         4.建议:重写的方法尽量和父类的保持一致

         5.只有能被添加到虚方法表中的方法才能被重写

          (重写的本质是替换虚方法表中的方法)

三、构造方法的访问特点

  1.父类中的构造方法不会被子类继承

  2.子类中所有的构造方法默认先访问父类中的无参构造,再执行自己

   因为子类在初始化之前需要先初始化父类,中的数据空间

   子类构造方法的第一行语句默认都是:super();不写也存在,而且必须在第一行

  3.如果想调用父类的有参构造,则必须手动调用super(参数);

四、this、super使用总结:

  this:理解为一个局部变量,表示当前方法调用者的地址值。

  super:表示父类存储空间