1.继承相关
public class Fu {
public int num = 10;
public Fu() {
System.out.println("Fu");
}
}
public class Zi extends Fu{
public int num = 20;
public Zi() {
System.out.println("Zi");
}
public void show(){
int num = 30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
public class ExtendTest {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}
2.jdk和jre有什么区别
JRE: Java Runtime Environment
JDK:Java Development Kit
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。
3.Overload和Override的区别, Overload的方法是否可以改变返回值的类型
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型
构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
4、 == 和 equals的区别
- "== " 基本数据类型是比较两个对象的内容(数值和数值类型)
int i = 2;
int k = 2;
char m = '2';
System.out.println(i == k); // true
System.out.println(m == k); // false
-
引用数据类型中 == 和 equals 比较的都是两个对象的地址值, 如果重写了 equals 方法比较的是两个对象的内容是否一致
Object obj1 = new Object();
Object obj2 = new Object();
// 都是比较的地址值
System.out.println(obj1.equals(obj2)); // false
System.out.println(obj1==obj2); // false
String 、Interger等类对equals进行了重写, 实际比较的是两个对象的内容是否一致
String a = new String("abcd");
String b = new String("abcd");
// abcd 放在常量池中
String c = "abcd";
String d = "abcd";
if (a == b){ // false
// 不是同一个对象
System.out.println("a==b");
}
if (a.equals(b)){
// true String 重写了equals
System.out.println("a==b equals");
}
if (c == d){
// true 共享同一变量
System.out.println("c==d");
}
if (c.equals(d)){
System.out.println("c.equals(d)");
}
String 的重写
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
// 判断是否属于String类型
if (anObject instanceof String) {
// 强制转换为String类型
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}