第十七天学Java(final和static关键字)

2.1abstract

    词义:抽象的

    A:修饰方法,表示抽象的方法,什么意思呢,就是这个方法,只有方法的声明,没有具体的实现

        意味着:表示有这个功能,但是没有具体的要执行的代码  

  B:还可以修饰类,如果一个类中包含了一个抽象方法,那么该类就必须时抽象的

        意味着:抽象类,不能被实例化(创建对象),因为里面可能包含了抽象方法

                        最大的目的:强制子类的重写。

            所以一个类包含了抽象方法,那么该类就是抽象类,不能被实例化,只能等待子类来继承并是想这个抽象方法。子类应该积极的是想这些方法,就可以创建子类对象,但是如果子类没有实现全部的抽象方法,呢么子类也是抽象的,要再等子类继承,并实现抽象方法

    常见的错误 CTRL+1 万能键

    abstract使用总结:


1、为什么要使用抽象类?

            有些类创建了对象没有意义,需要把这个定义为抽象类

            抽象类,不能实例化,只能被继承


2、abstract关键字

            修饰方法:抽象方法,没有方法体,没有(),需要使用;来结束方法的声明

            修饰类:抽象类,抽象方法所在的类必须是抽象的


3、抽象方法:

            没有方法体,就是没有()

            一个类中如果有抽象方法,那么这个类必须是抽象类

            如果一个类是抽象的,不一定非要包含抽象方法

            抽象方法必须被子类重写,除非子类也是抽象的


 4、抽象类和普通父类只有一点区别,就时可能包含抽象方法

            抽象类中,可能包含有抽象方法,所以抽象类不允许实例化

            抽象类也可以没有抽象方法(语法上是可以的),但是往往没有实际用途

            抽象类中可以有构造方法,虽然抽象类不能实例化,不能创建对象,但是狗仔方法会在子类的构造中被调用

            抽象类中的抽象方法,一定要被子类重写,如果子类没有重写,子类也抽象


5、抽象类和普通的区别:

            抽象类需要使用abstract关键字,普通类不需要

            构造方法:都有,但是抽象方法不能被实例化,普通类可以

            成员方法:

                抽象类中,可以是抽象的,也可以是普通的

                普通类中,不能由抽象方法,只能是普通方法

            成员变量:都有

            最后:抽象类和普通类很相似,只不过可能多了抽象的方法,抽象类是天生做父类的

2.2final关键字

        词义:最终的,最后的

        在Java中,可以修饰类,变量,方法

        1、final修饰局部变量

            赋值之后,数值不能再修改了

        2、final修饰成员变量

            final在类中修饰成员变量的话。要求必须初始化,并且赋值之后,不能再修改数值了

        3、final修饰成员方法

            final所修饰的方法,不允许子类重写的

        4、final修饰类

            final修饰的类,不允许子类继承,俗称“太监类”

所以:

        1、final修饰变量(成员变量和局部变量),则为常量,只能赋值这一次

                修饰成员变量的时候,定义时,要同时给出初始化的值

                修饰局部变量,只能赋值一次

         2、final修饰方法,则该方法不能被子类重写

        public final 返回值类型 方法名(){

        3、final修饰类,则类不能被继承

        final class 最终类{

  对比final和abstract关键字修饰方法        

        1、final修饰的方法,不让子类重写

        2、abstract修饰的方法,要求子类必须重写

        3、所以final和abstract不能同时修饰一个方法


    变量:本质就是一小块内存,用于存储数据。在程序执行过程中,数值可以改变

    常量:同变量类似,也是存储数据,数值不能改变


2.3static关键字

词义:静态的。属于类,不再属于对象

修饰属性

    类中的属性:2中

        非static,叫成员变量(name,age),属于对象的,随着对象的创建而产生,创建几个对象,就有几份该属性值,对象的属性值是彼此分开的

        对象,成员变量,表示该对象访问自己的属性,赋值,取值

        static的属性,叫做静态属性,属于类的,和对象无关,随着类的加载而产生,贼内存中,就一份,应该由类直接访问,但是对象也可以访问,多个对象,共享一份

        类,静态属性,可以赋值,取值


    应用:什么样的属性。适合时静态的属性,什么样的适合成员变量

        如果一个类中的某一个属性,该类所有的对象,对于该属性的取值都相同,就可以写成静态的属性。节约内存,操作简便


所以,static修饰的属性:

        1、静态成员变量,使用static修饰的成员变量,行医在内存中的【数据区】

        2、静态成员变量,不建议适用对象调用,赋值,取值,如果使用,也允许但是会警告

        3、静态的成员属性,属于类的,应该由类直接调用【强雷推荐方式】

            类名。静态属性名= 取值/赋值

        4、如果代码中,没有创建对象,可以通过类名直接访问静态属性【和对象无关】

        5、不过通过对象还是类名,如果修改了静态属性的值,那么就改了,其他的对象来访问,都会受到影响


2.3.3修饰成员方法

    //static修饰方法的语法格式

        public static void 方法名(参数列表){

            方法体;

        }

        一个方法,一旦使用static修饰,表示该方法属于类,应该由类来直接调用

    静态方法中:

        可以访问静态的属性(属于类的),但是不能访问非静态的属性(属于对象的)

        可以访问静态的方法(属于类的),但是不能访问非静态的方法(属于对象的)

        结论:静态方法中,不要涉及对象的内容,对象的属性,对象的方法,包括this和super关键字


         非静态方法,属于对象,全都行,静态的,非静态的都可以,thissuper都i可以

应用:

            尽可能的将一个方法设计为静态的,但是如果方法中涉及到了对象内容,对象属性,对象的方法,以及this和super关键字,那么这个方法就不能是静态的了,只能是非静态的

三、总结

1、abstract:抽象的

    修饰方法:抽象方法。必须被子类重写。

    修饰类:抽象类。不能实例化,只能等待子类继承,并实现抽象的方法。同普通类很类似,

    作用:强制子类必须重写。

2、final:最终的

    修饰变量:成员变量(直接初始化赋值),局部变量。不让修改数值。

    修饰方法:不允许子类重写。

    修饰类:不允许有子类继承。

    作用:不让改!!!

3、static:静态的

    修饰变量:属于类的,由类来访问,就一份。对象也可以访问,多个对象共享这一份数据

    修饰方法:属于类的,由类来访问。

    修饰代码块

    修饰内部类

你可能感兴趣的:(第十七天学Java(final和static关键字))