今天有个朋友是学C++的,学校有个java的考试,他问了我关于static abstract final synchronized的一些问题,突然觉得很有必要整理一下,顺便还想说一下向上转型,向下转型。
1.static
通常在创建类的实例时,都会创建自己的实例变量,但是在变量的声明中可以用static修饰,表示属于类的本身,独立于类产生的任何对象。这种变量称为静态变量(静态属性)。
定义方法的时候也可以用static修饰,表示这个方法属于类本身。
静态函数里只能调用其他的静态函数或者静态变量,否则会造成编译错误,静态成员函数也不可以使用this和super,因为他们是和类的对象相关联的,静态变量和静态函数不需定义就可直接使用,最常见的就是输出语句
System.out.println("abc");
并没有创建System的实例,是因为println是System类中的静态方法,可以直接调用。
2.final
final意为最终
被final修饰的类不能被继承,被final修饰的方法不能被重写,被final修饰的常量不能更改。
类不能同时被修饰为abstract和final 因为二者相互矛盾,会在第三点中说明。
3.abstract
抽象类当中可以没有抽象方法,但要是有抽象方法那就必是抽象类。
abstract必须在class前面,位置不可更改。
如果子类实现了父类当中的所有abstract方法也需将子类定义为抽象类。
abstract不能修饰构造方法。
抽象类不能实例化,抽象类的构造函数是在创建子类对象的时候被调用的。
多说一嘴,接口不能实例化,但可以定义引用变量。
下面说一下为什么abstract都不能与哪些关键字一起用。
Abstract修饰过的类必须用过继承或者接口来实现重写否则就是个摆设
final不可以被继承,所以不能一起用
private是在类得内部,重写时是访问不到的,故不能连用。
static静态的,随着类的创建而创建,销毁而销毁,但abstract是动态的,需要通过继承或接口来实现,故不能连用。
4.synchronized
synchronized:用于防止多个线程同时调用一个对象的该方法,与static连用可防止多个线程同时调用一个类的该方法。
synchronized也不能与abstract连用,synchronized需要直接被调用。
接下来说一说,向上转型和向下转型。
向上转型:子类的引用对象转化为父类的对象。Father f = new Son();
向下转型:父类的引用对象转换为子类的对象。Son s = (Son)f;
本文详细解析了Java中的static、final、abstract、synchronized等关键字的作用及用法,并介绍了向上转型和向下转型的概念。
681

被折叠的 条评论
为什么被折叠?



