关于abstract关键字、final关键字和static关键字注意事项的【整理归纳】
(针对小白,大神绕道~~~~)
---------------------------------------------分割线-------------------------------------------
abstract关键字
如果我们学过继承,那么我们一定知道父类,那么有一种类是专门用来做父类的,他就是抽象类(abstract class)
上面说的只是为了让你更好的记住:抽象类只能被继承,不能被实例化,也就是说不能用new,new出一个女朋友(对象)
抽象类中的方法分为两种,首先是一般方法,其次是抽象方法(abstract修饰的方法),abstract方法只需声明而无需实现,他的定义只声明返回值的数据类型,方法名称和所需参数,样貌如下:
abstract 返回值的数据类型 方法名(参数表);
例如:
abstract public double getArea();
值得注意的是,抽象类中不一定要包含抽象方法,但是包含抽象方法的类,必须要声明为抽象类
当一个方法被定义成抽象方法时,继承他的抽象类的子类必须实现该抽象方法 (强制要求) ,或者改子类也定义成抽象类,否则报错
那抽象类能不能有构造方法呢?
答案是可以,但是有一个唯一的要求就是,该构造方法不能被声明为抽象的,由于不能用抽象类new成对象,也因此在抽象方法中定义构造方法是多余的。
static关键字
被static修饰的成员叫静态成员或者类成员,而不用static修饰的成员叫实例成员,其实static,我们只需要把它归给类就可以,他是专属于类的,不属于任何对象。
关于静态变量,除去必要的规则外,唯一需要注意的点是,在调用时,尽量要用给你相似,类名调用,虽说也能用对象调用。
关于静态方法,有一个值得注意的地方如下:
|-------在静态方法中不能使用this或super。因为this代表调用该方法的对象,但现在“静态方法”既然不需要对象来调用,this自然也不需要也不应该存在于”静态方法“内部,而super与this一样,super指的也是对象,所以super同意也不能存在于静态方法中。
final关键字(不细说)
总结
好了,下面才是我要说的易错、易混淆点:
1.static修饰的变量必须赋值吗?
定义时不一定要赋予初值,也可以通过对象或者方法(只能是静态方法)更改
2.final修饰的变量必须赋值吗?
必须赋予初值(不一定要在一个语句,如可以final int a;a = 5;),而且赋予初值后不能再更改。
3.static final修饰的变量必须赋值吗?
必须赋予初值(一定要在一个语句,如可以static final int a = 5;
但是不可以static final int a;a = 5;),而且赋予初值后不能再更改。
4.静态方法中不能使用非静态成员,但是可以使用类内的其他静态成员。
5.静态成员方法中可以通过new构造方法创建对象
6.抽象类中不一定包含抽象方法,但包含抽象方法的类一定要声明为抽象类。
7.由于抽象类是需要被继承的,所以abstract类不能用final修饰,一个类不能既是抽象类,又是最终类。
8.abstract不能与private、static、final或native并列修饰同一个方法。