Javase之基础2

1、方法

a、一个文件中可以定义多个类,但是只有一个类用public修饰且public修饰的类的类名要与文件名一致。

  一个类中可有多个方法,方法分为带参方法和不带参方法,带参方法就是调用方法时候要给它传入相应类型的参数,

  方法中和类中都可以声明变量,若在类中声明的变量我们成为成员变量,在方法中声明的变量为局部变量,成员变量系统默认初始化,

  而局部变量不会,所以局部变量要自己去给它初始化,如果成员变量和局部变量一样,则优先选择局部变量。

  若局部变量和成员变量同名,this调用的是成员变量:

          

  说道变量要提一下封装,为了将变量变为私有的,我们通常用private修饰,这个修饰是范围最小的,只能在它定义的类中使用,

  所以我们要用到getter、setter访问器(快捷键:Shift+Alt+S)。封装之后别的类只能通过setter访问器进行给变量赋值,

  如果变量很多的话,我们一个一个去初始化会很麻烦,这时候我们可以利用构造方法,所谓构造方法就是通过构造器给类封装的变量进行初始化。

  对于构造器我们可以使用字段生成构造器,这样可以给每个变量初始化,当我们没定义构造方法的时候,系统会自己创建一个“默认构造器”。

b、 一个类中我们可以创建名字一样的多个方法,但是参数类型或个数不能一样,调用方法的时候,赋值的参数类型是什么就会调用相应的方法

  注意:int ... n 它的底层是数组,所以参数 int [ ] n 与 int ... n不能同时存在的。

c、方法重写与方法重载

  方法重写:方法重写发生在继承的子类中,子类继承父类,它具备了父类的所有特征,继承父类所有的方法和变量。子类可以定义新的特征,

     当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作称为重写,也叫称为覆写或覆盖。

     所谓方法的重写是指子类中的方法与父类中继承方法有完全相同的返回值类型、方法名、参数个数以及参数类型。

     这样,就可以实现对父类方法的覆盖。如果子类将父类中的方法重写了,调用的时候肯定是调用被重写过的方法,那么如果非要调用

     父类中的方法要怎么办?此时,通过使用super关键字就可以实现这个功能,super可以从子类访问父类的内容,如果要访问被重写过

     的方法可以用“super.方法名”调用。super并不是一定要在方法重写后才使用,super强调的是去父类查找,就不在子类查找了。

  重写规则:

    (一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。
    (二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。.. 
    (三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,父类中的方法并不是在任何情况下都可以重写的,

      当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,

      在子类定义为private,程序运行时就会报错。 (搞—>低:public、protected、default、private)

    (四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。所以如果某一个方法在父类中的访问权限是private,

      那么就不能在子类中对其进行重写。如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。

    (五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,

      而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,

      或者比被重写方法声明更加宽泛的检查型异常。

  方法重载:

    方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
    所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。

  总结:所谓重写就是子类中的方法名、参数、返回值类型和父类中医院,那么为什么要重写?因为子类中此方法的行为更多,只是父类中的不能满足要求,

     或者子类中的方法与父类中的表达的不同,这时候就不能直接用父类的方法了。

      比如:父类       手机{

                  来电显示(){

                    电话号码;

                      }

                    }

         子类      手机{

                  来电显示(){

                    电话号码;头像;归属;

                      }

                    }

2、静态(static)

  静态变量:之所以存在静态变量,是由于人们想把变量变成共享的,而且每个调用这个变量都会对变量造成影响。

  静态方法:当后边用到的方法都一样的时候,也就是不同的人调用的方法都为一个方法,那么我们就可以把这个方法设置为静态变量,

       调用这个方法不用创建对象了(类名.静态方法)

  静态块:public     class     类{

        static {

          静态块;//初始化类,给类中的静态成员赋值

        }

      }

  构造块:public     class     类{

         {

           构造块;//初始化对象,自动调用在创建对象时,new 自动调用,优先于构造器

        }

      }

    补充:我们都知道,构造器是用来初始化的方法,当有多个构造器,若每个构造器都需要对一个变量进行相同的初始化,则每个构造器都要写一行代码

       来进行对这个变量的初始化,太麻烦了,这时候创建构造块,里边对这个变量的初始化,以后的构造器就会自动调用,所以就不用每个都写一行

       代码去初始化了。也就是说构造器在执行之前会先调用构造块。

    顺序: 静态块—>构造块—>构造器

3、抽象(abstract)

  a、抽象类

    只约定类所具有得抽象行为,没有具体的实现相应的行为(抽象类可以有常量、变量、构造(构造器不能抽象)、抽象方法、静态方法、普通方法)

      abstract class Test{

        int a ;
        String b = "a";
      public abstract void test();
      public void test2() {

            }
      static void test3() {

            }
         }

  b、抽象放法

    我的理解是抽象方法它只是在这个类中告诉人们它有一个这个方法,并不需要去具体实现什么,因为子类中调用此方法都要进行重写。

    比如行驶方法,虽然是行驶但是飞机和汽车的行驶方法是不同的,所以子类飞机类和汽车类要对这个抽象方法进行不同的重写。

  注意:1、抽象类不能创建对象,所以要想调用抽象类的属性和方法要给它创建子类,由子类去创建对象。

     2、抽象父类的子类,子类的创建必须实现所有抽象父类的抽象方法,也就是要重写父类的抽象方法

     3、abstract不能喝private、static、final连用,抽象方法只能设置可视性修饰符“公用”或“受保护”中的一个

4、接口

  说到了继承,不得不提及接口,接口就相当于一组功能的封装,用interface来声明,

    比如:interface  接口名{

          常量;抽象方法;默认方法;静态方法;静态内部类型;

            }  

  接口其实和类得地位是一样的,同样的一个文件中有多个类或者接口,只能有一个带public修饰符。

  因为接口中带有一些类中所需要的一些额外的功能,所以想要用这些功能,就要实现这个接口(implements)

    比如:class      类     implements  接口名{

           接口中所有的抽象方法都要方法重写以实例化;

              }

    

  

猜你喜欢

转载自www.cnblogs.com/ly752043334/p/10820686.html