-
static 修饰的属性,相较于实例变量,特别之处有:
加载区别:如果一个被static 修饰的内部类需要使用的话是不需要实例化对象,而实例变量,需要先对象的实例化,才可以使用其实例变量,不能直接使用;
存放位置:static 修饰的类变量随着类的加载而存在共享区中;实例变量随着对象的建立而存在于堆内存中;
生命周期:static 修饰的类变量随着类的加载而加载;实例变量随着对象的加载而加载。
-
final 可以用来修饰哪些结构,分别为:
final修饰类,表明该类不能被继承;final修饰方法,表明该方法不能重写;final修饰一个变量,表明该变量变为一个常量,在之后的操作里不能被修改。
-
类的属性赋值的位置有:
1.默认初始化 2.显示初始化、代码块中赋值 3.构造器初始化 4.在方法中/通过对象.属性或者对象.方法中赋值
先后顺序为:
顺序是:1->2->3->4
-
abstract 能修饰:
修饰类,方法
不能修饰属性和构造器。
不能修饰私有方法、静态方法、final修饰的方法和final修饰的类。可以修饰类
修饰后的类不能实例化,需要我们提供一个子类进行继承,如果这个子类是一个普通的类(非抽象类)的话就必须重写抽象类中的所有抽象方法。
可以修饰方法
抽象方法定义了一种功能的标准,具体的执行和实现需要子类去实现,接口的方法就是抽象方法。定义了方法而不实现,正因为这样,其子类可以有更多的展现空间和实现能力。 -
接口能继承接口,但是在实现的时候,类必须重写所继承接口及其父类接口的方法;
抽象类能实现(implements)接口,抽象类可以实现接口,但实现其方法时必须写方法体,若不写方法体需加上abstract修饰,或可以直接不重写方法;
抽象类继承非抽象的类?,如果子类也是一个抽象类,并不要求一定重写父类方法。如果子类不是抽象类,则要求子类一定要实现父类中的抽象方法。 -
抽象类和接口共同点和区别
共同点:都可以作为形参和返回值;
都可以生成.Class文件;
他们都不能实例化对象,都只能通过实现类或者继承类去实例化;
都可以包含抽象方法(接口中默认隐式声明为public [abstract]);
声明的方法必须被继承的类全部实现。
不同点:
抽象类要被子类继承,接口要被类实现;
接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
接口成员方法只能是抽象方法默认修饰符:public abstract,而抽象类里可以没有抽象方法,也可以有普通类。