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:静态的
修饰变量:属于类的,由类来访问,就一份。对象也可以访问,多个对象共享这一份数据
修饰方法:属于类的,由类来访问。
修饰代码块
修饰内部类