1.Overload(重载)与Override(重写)的区别
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了,而且如果子类的方法名和参数类型和个数都和父类相同,那么子类的返回值类型必须和父类的相同;
重载Overloading是一个类中多态性的一种表现,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。Overloaded的方法是可以改变返回值的类型。也就是说,重载的返回值类型可以相同也可以不同。
2. super和this的区别,以及super和this的应用由哪些?
this关键字:代表当前对象的引用, 谁来调用我,我就代表谁
super关键字:代表当前对象父类的引用
this和super的使用区别
1)调用成员变量:
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
2)调用构造方法
this(...) 调用本类的构造方法
super(...) 调用父类的构造方法
3)调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
this.成员方法 调用父类的成员方法
3.接口与抽象类的区别
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.
4. 非静态成员变量与静态成员变量的有哪些区别?什么情况下使用静态成员变量?
区别:就是静态成员变量是所有对象共用的,只有一份,不会为每一个对象都维护一份,可以通过类名直接调用,不需要依赖于对象,随着类的加载而存在,类的消失而消失
建议使用静态的场景:
(1)变量所包含的对象生命周期较长。
(2)变量所包含的对象数据稳定。
(3)该类的对象实例有对该变量所包含的对象的共享需求。
其他回答亦可:
数量上的区别:
非静态成员变量是在每个对象中都维护一份数据
静态成员变量只会在方法中维护一份数据。
访问方式上的区别:
非静态的成员变量只能使用对象进行访问.
静态成员变量可以使用对象、类名进行访问。
存储位置上的区别;
非静态成员变量是存储在堆内存中。
静态成员变量是存储在方法区中。
生命周期的区别:
非静态成员变量是随着对象的创建而存在,随着对象的消失而消失。
静态成员变量是随着类文件的加载而存在,随着类文件(字节码文件)的消失而消失。
作用上的区别:
非静态成员变量的作用是用于描述一类事物的属性。
静态成员变量的作用是提供一个共享数据给所有对象使用的。
当要提供一个共性数据数据给所有对象使用的时候就用静态成员变量