1.Java 中的多态的机制
父类或接口定义的引用变量,可以指向子类的实例对象;而程序调用的方法,在运行期才动态绑定。
public、private、protected, default
修饰符 |
当前类 |
同 包 |
子 类 |
其他包 |
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
× |
default |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
2.重载(overload),重写(override)
重载:在一个类中同名的方法如果有不同的参数列表(忽略返回值异常等信息),在编译时确定。
重写:子类重写了父类方法名、参数,返回值均相同的方法(访问权限子类小于等于父类)。
其中声明为 final 的方法不能被重写,声明为 static 的方法不能被重写
3.为什么函数不能根据返回类型来区分重载?
重载是发生在编译期间的,对于调用端在调用方法时可以不获取对应的返回值;这样在程序运行时,编译器不知道具体调用哪一个方法。
4.抽象类(abstract class)和接口(interface)
抽象类 |
可有构造器,成员变量,抽象方法,具体方法,静态方法 |
有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法 | |
一个类只能继承一个抽象类 | |
成员可以是 private、默认、protected、public | |
| |
相同点 |
均不能够实例化 |
一个非抽象类如果继承了抽象类或者实现了接口,需要对其中的抽象方法全部进行实现 | |
接口 |
只能有抽象方法 |
成员全都是 public ,且其成员变量实际上都是常量 | |
一个类可以实现多个接口 |
5.抽象方法,静态方法,本地方法,synchronized修饰
抽象方法需要子类重写;静态的方法是无法被重写的;本地方法是由本地代码(如 C 代码)实现的方法;synchronized 和方法的实现细节有关。
6.& 和 && 的区别
& :(1)按位与;(2)逻辑与,当false & 右边时,右边参与运算。
&& :短路与,&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。
7.如何跳出当前的多重嵌套循环
在最外层循环前加一个标记如 A,然后用 break A;可以跳出多重循环。
8.值传递,引用传递
Java 语言的方法调用只支持参数的值传递。当一个对象实例Person p作为一个参数被传递到方法中时,对p的修改,即使方法返回值为void,仍会修改p的属性项。
9.char型变量中能不能存贮一个中文汉字
在Java中,char类型占2个字节,而且Java默认采用Unicode编码,一个Unicode码是16位即2个字节。故char类型变量可以存储一个中文汉字。
数据在JVM外部不一定是Unicode编码,故在文件读入读出过程中需要进行编码转换。如 InputStreamReader 和 OutputStreamReader承担了编码转换的任务。
10.静态变量,实例变量
静态变量: 即static变量,它属于类,在内存中有且仅有一个拷贝;可实现多个对象的内存共享。
实例变量: 必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。
11.==和 equals
== :运算符,如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址值是否相等。
equals():用来比较方法两个对象的内容是否相等,不能用于基本数据类型的变量;如果没重写,则默认比较的是变量所指向的对象的地址。
12.break 和 continue
break 用于完全结束一个循环,跳出循环体执行循环后面的语句。
continue 用于跳过本次循环,执行下次循环。
13.内部类
静态内部类,非静态内部类
静态内部类:可以不依赖于当前外部类对象而实例化;
非静态内部类:必须依赖于当前外部类对象才能实例化
实例