1重载和重写的区别
重写(Override)
从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重写写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下,对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。
例如:
public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Son s = new Son();
s.sayHello();
}
public void sayHello() {
System.out.println("Hello");
}
}
class Son extends Father{
@Override
public void sayHello() {
、 // TODO Auto-generated method stub
System.out.println("hello by ");
}
}
重写 总结:
重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
发生在父类与子类之间
方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
2重载(overload)
在一个类中,同名的方法如果有不同的参数列表(参数类型不同/参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。
例如:
public class Father {
public static void main(String[] args) {
// TODO Auto-generated method stub
Father s = new Father();
s.sayHello();
s.sayHello("wintershii");
}
public void sayHello() {
System.out.println("Hello");
}
public void sayHello(String name) {
System.out.println("Hello" + " " + name);
}
}
重载总结:
重载overload是一个类中多态性的一种表现
重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
重载的时候,返回值类型可以相同也可以不同。无法以返回类型作为重载函数的区分标准
面试时,问:重载(overload)和重写(override)的区别?
答:方法的重载和重写都是实现多态的方式,区别在于前者实现的时编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同/参数个数不同或者二者都不同)则视为重载;重写发生在子类和父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

String、StringBuffer、StringBuilder比较。
三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。
StringBuffer是线程安全,可以不需要额外的同步用于多线程中;
StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;
StringBuffer与StringBuilder两者共同之处:可以通过append、indert进行字符串的操作。
String实现了三个接口:Serializable、Comparable、CarSequence
StringBuilder只实现了两个接口Serializable、CharSequence,相比之下String的实例可以通过compareTo方法进行比较,其他两个不可以。
7、运行速度
执行速度由快到慢:StringBuilder > StringBuffer > String
8、小结:
如果要操作少量的数据用 String;
多线程操作字符串缓冲区下操作大量数据 StringBuffer;
单线程操作字符串缓冲区下操作大量数据 StringBuilder。
反射
在运行过程中,对于任何一个类都能获取它的属性和方法,任何一个对象都能调用其方法,动态获取信息和动态调用,就是反射。
java获取反射的三种方法:
1/通过new对象实现反射机制
2/通过路径实现反射机制
3/通过类名实现反射机制
抽象类和接口的区别
抽象类只能单继承,接口可以实现多个
抽象类有构造方法,接口没有构造方法
抽象类可以有实例变量,接口没有实例变量,有常量
抽象类可以包含非抽象方法,接口在java7之前所有方法都是抽象的,java8之后可以包含非抽象方法
抽象类中方法可以是任意修饰符,接口中java8之前都是public,java9支持private
扩展:普通类是亲爹,手把手教你怎么学,抽象类(多个类具有相同的东西,拿出来放抽象类)是师傅,教你一部分秘籍,然后告诉你怎么学。接口(规范了某些行为)是干爹,只给你秘籍,怎么学全靠你。
erro和exception有什么区别
error:程序无法处理,比较严重的问题,程序会立即崩溃,jvm停止运行
exception:程序本身可以处理(向上抛出或者捕获)。编译时异常和运行时异常
final关键字有哪些用法
修饰类:不能被继承
修饰方法:不能被重写
修饰变量:声明时给定初始值,只能读取不能修改,如果是对象引用不能改,但是对象的属性可以修改
jdk1.8的新特性
1/lambda表达式;2/方法引用;3/函数式接口;4/optional类
java和c++的区别
都是面向对象的语言,都支持封装/继承/多态
java不提供指针来直接访问内存,程序内存更加安全
java的类是单继承的,c++支持多重继承;虽然java的类不可以多继承,但是接口可以多继承
java有自动内存管理机制,不需要程序员手动释放无用内存
final/finally/finalize区别
final可以修饰类/变量/方法,修饰类表示该类不能被继承,修饰方法表示该方法不能被重写/修饰变量表示该变量是一个常量不能被重新赋值




