静态变量和实例变量的区别
- 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加
- 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
是否可以从一个static方法内部发出对非static方法的调用?
- 不可以,因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在改对象上进行调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上呢?这个逻辑无法成立,所以一个static方法内部发出对非static方法的调用。
Overload和Override的区别。参数列表相同,返回值不同的方法,是否是重载方法?
- Overload是重载的意思,Override是覆盖的意思,也就是重写
- 重载是指在一个类里,方法名相同,参数不同
- 重写是指子类继承父类,子类里重新编写了父类中的同名(同参数)方法,也就是覆盖了父类的方法
- 不是!因为重载必须要求参数列表不同
接口是否可继承接口?抽象类是否可以实现接口?抽象类是否可继承具体类
- 接口可以继承多个接口。抽象类可以实现接口,抽象类是可继承具体类
- 抽象类和普通类的唯一区别就是不能创建实例对象和允许有abstract方法
面向对象有那三大特性?
- 面向对象的三大特征,分别是继承、封装和多态。
- 封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private修饰该属性,使其隐藏起来。其他类可以通过调用这些方法,改变隐藏属性的值.封装的目的就是实现高内聚,低耦合,防止程序相互依赖性而带来的变动影响。
- 继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行,使用extends关键字实现继承:子类中可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据的方法和机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性
- 多态:多态就是在声明时使用父类,在实现或调用时使用具体的子类;即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性,多态增强了软件的灵活性和扩展性