类与对象的关系:
1、类是一类具有相同属性的事物的统称,是一种抽象。
2、对象是类的具体体现,又称实例。
3、类是一种静态的概念,而对象是一种动态的机制。
属性:
Java中的属性一般分为类属性(静态变量)、实例属性(成员变量)、局部变量
类属性:声明为static的属性,在整个过程中只进行一次初始化,在内存中只开辟一个空间,不论在哪儿调用,值保持一致。一旦被修改,所有引用它的地方都会跟着修改。一般直接通过类名进行调用。
实例属性:实例属性即成员变量,成员变量不属于任何方法,是属于类的变量,可以不初始化,有默认的初始值,如String的是null,int的是0。
局部属性:在方法内部定义的变量,声明周期在方法内部,局部变量必须初始化后再进行使用
成员变量和局部变量的区别:
①在类中的位置不同:成员变量在类中方法外;局部变量在方法定义中或者方法声明上
②在内存中的位置不同:成员变量在堆内存,是随着对象的创建在堆内存中开辟空间;局部变量在栈内存
③生命周期不同:成员变量随着对象的创建而存在,随着对象的消失而消失;局部变量随着方法的调用为存在随着方法的调用完毕而消失
④初始化值不同:成员变量有默认初始化值,局部变量没有默认初始化值,必须定义赋值然后使用。
【栈内存的变量是局部变量必须声明初始化值来使用,而堆内存中的变量有默认值】局部变量的名字可以和成员变量的名字相同,在方法中使用的时候采用的是就近原则
类属性(静态变量)和成员变量的区别:
①所属不同:静态变量属于类--类变量;成员变量属于对象--实例变量(对象变量)
②内存中的位置不同:静态变量存储于方法区中的静态区;成员变量存储于堆内存
③内存中出现的时间不同:静态变量随着类的加载为加载,随着类的消失而消失;成员变量随着对象的创建而创建,随着对象的消失而消失
④调用不同:静态变量可以通过类名调用也可以通过对象名调用;成员变量只能够通过对象名调用
方法:
类的功能,由方法头和方法体构成。方法头由访问控制符(public private)、返回类型、方法名和参数列表。可以为方法添加一些特殊的关键字以实现特殊的功能,如synchronized、final、static、abstract等等。
重载(overload)和重写/覆写(override):
重载:同一个类中,具有相同的方法名以及不同的参数列表的一种机制:参数列表的不同具体表现在:参数的数目、类型以及参数的顺序不同。【不能够通过方法的返回值来区分两个方法】
重写:
重写是在继承中存在的,在两个类中(子类和父类)。子类重写父类的方法,方法名以及参数都相同
面试例题总结:
①面向对象和面向过程的区别?
②构造器Constructor是否可被override?点击打开链接
构造器不能够被继承,所以不能被重写,但是可以进行重载。构造器是在生成一个类的实例的时候对这个类的实例进行初始化的。构造器不是方法所有对方法使用的都不适用于他。
③String类能否被继承?
不能,因为String类是由final关键字进行修饰的,他的定义是:public final class String extends Object。
--》什么样的类不能够被继承?
一,在Java中,只要是被定义为final的类,也可以说是被final修饰的类,就是不能被继承的。
二,final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变,也称为修饰的标识为常量。如果一个类的域被关键字final所修饰,它的取值在程序的整个执行过程中将不会改变。
三,假如说整个类都是final,就表明自己不希望从这个类继承,或者不答应其他任何人采取这种操作。换言之,出于这样或那样的原因,我们的类肯定不需要进行任何改变;或者出于安全方面的理由,我们不希望进行子类化(子类处理)。
④override和overload之间的区别?
重载是在同一个类中,方法名相同而方法列表不同的方法之间的一种机制
重写是在继承中存在,子类重写父类的方法,具有相同的方法名和参数。
⑤Java的四个基本特性?
继承、封装、多态、抽象--(具体?)