拿捏java 4.0:static+继承

93 阅读5分钟

阶段一:Java入门(面向对象进阶)

1、static

静态,可以修饰成员变量和成员方法
被static修饰的成员变量是静态变量;
    特点:被该类的所有对象共享
    调用方法:类名调用
             对象名调用
    内存图:静态变量优先于对象出现,是随着类的加载而加载的,有单独的静态存储区,对于每个对象是共享的,是独一份的,存储在堆内存中(普通变量是有许多份的)

被static修饰的成员方法是静态方法;
    特点:多用在测试类和工具类中
         javabean类中很少用到
    调用方法:类名调用
             对象名调用

2、各种类

JavaBean类:描述一类事物的类;
测试类:检查其他类是否书写正确,带有main,程序入口
工具类:不是描述一类事物,而是帮助我们做一些事情的类
    1、类名知名起意
    2、私有化构造方法
    3、方法定义为static

3、static的注意事项

  1、静态方法只能访问静态变量和静态方法
  2、非静态方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和非静态的成员方法
  3、静态方法中没有this关键字

4、继承

1、关键字:extends
    public class student extends person{}
    student类是子类(派生类),person是父类(基类,超类)
2、好处:将子类重复的代码抽取到父类中,提高了代码复用性
     子类在父类的基础上,增加其他功能,使子类更加强大
   使用继承:类与类之间有共性,且满足子类是父类的一种
3、特点:java只支持单继承(一个子类只能继承一个父类)
     不支持多继承(子类不能同时继承多个父类)
     但支持多层继承(子类A继承父类B,父类B继承父类C,c是a的间接父类,b是a的直接父类)每一个类都直接间接继承于object
4、子类可以***继承***父类中的哪些内容
    构造方法  非私有(不能)           私有(不能)
    成员变量  非私有(能)             私有(能)
    成员方法  非私有、虚方法表(能)    私有(不能)
5、继承中:成员变量的访问特点 
        就近原则:谁离我近,我就用谁(先从局部位置找,再从本类成员位置找,最后父类成员位置找,逐级往上)
        例:class Fu{String name="Fu"; }
            class zi extends Fu{
                String name="zi";
                public void zishow(){
                    String name="zishow";
                    System.out.println(name);//就近原则:zishow,从局部位置网上找
                    System.out.println(this.name);//本类的成员:zi,从本类成员位置网上找
                    System.out.println(super.name);//父类的成员:Fu,从父类成员位置网上找
                }
            }
6、继承中:成员方法的访问特点
    直接调用满足就近原则:谁离我近,我就用谁
    super调用,直接访问父类
    this调用,先查看本类的方法,如果没有,就会向父类查找
    
    方法的重写:当父类的方法不能满足子类现有的需求时,需要进行方法的重写
               子类中出现了和父类中一模一样的方法声明时,称子类的方法是父类的重写
               @Override重写注解:放在重写后的方法上,校验语法是否正确
                                 若有红色波浪线,则表示语法错误
               重写方法的名称和形参列表必须和父类中的一致
               子类重写父类方法时,访问权限子类必须大于等于父类(空着不写<protected<public)
               子类重写父类方法时,返回值类型子类必须小于等于父类
               只有被添加到虚方法表中的方法才能被重写,如果子类对方法进行了重写,那么虚方法表中会把父类的方法进行覆盖
7、继承中:构造方法的访问特点
   父类方法的构造方法不会被子类继承
   子类中的所有构造方法默认先访问父类中的无参构造,再访问自己,原因是子类初始化时可能会用到父类中的数据
   子类初始化之前一定先调用父类的构造方法完成父类数据空间的初始化
   子类构造方法的第一行默认是:super():默认调用父类的空参构造方法,不写也存在,且必须是第一行,如果想要调用父类的有参构造,必须手动写super()进行调用
   例如:class person{
           String name;
           public person(){}
           public person(String name){
                 this.name=name;
       }
   }
       class student extends person{
           public student(){
               super();//虚拟机默认存在,不需要自己写,1
           }
           public student(String name){
               super(name);//需要自己写,调用父类person的有参构造函数,2
           }
       }
       student stu=new student();//调用1
       student stu=new student("zhangsan");//调用2
8this
   this.成员变量:访问本类的成员变量
   this.成员方法:访问本类的成员方法
   this():访问本类其他构造方法
       例如:class student{
           String name;
           int age;
           String school;
           
           public student(){
               this(null,null,"Shanghai Martime University");//调用下面有参构造函数;虚拟机不会添加super();this()必须在第一行
           }
           public student(String name,int age,String school){
                 this.name=name;
                 this.age=age;
                 this.school=school;
       }
   }
       student stu=new student();//生成了一个对象,默认school属性的内容是"Shanghai Martime University"
9super
   super.成员变量:访问父类的成员变量
   super.成员方法:访问父类的成员方法
   super():访问父类构造方法