1. 抽象类与接口:
抽象类:
含有abstract修饰符的类即为抽象类,抽象类不能创建实例;有抽象方法的类必须定义为抽象类,类中的方法不必是抽象方法;抽象类中定义的抽象方法必需在子类中实现;如果子类没有全部实现父类的抽象方法,那么子类也定义为抽象类。
接口:
接口中所有方法都必须是抽象的;方法默认是public abstract类型;成员变量默认是public static final。
区别:
抽象类可以定义构造方法,接口不能;
抽象类可以定义普通成员变量、方法,接口不能;
抽象类中的抽象方法的访问类型可以是:public、protected、默认类型,接口只能是public类型。
抽象类中可以定义静态方法,接口不能;
关系:
Java中通过继承或实现接口来实现多态,我们一个类可以实现多个接口,但只能继承一个类或抽象类;一个接口可以继承多个接口;一个类在继承时还可以实现多个接口。
2.Java中的final、static、super、this关键字:
Final关键字修饰类,表不能被继承;修饰方法,表不能被重写;修饰变量表常量,其中修饰基本数据类型变量时,表其值不可改;修饰引用数据类型变量时,表引用空间地址值不可改,但其内容可以改变。我们知道:基本类型的包装类、String都使用了final修饰,所以该类无法继承,比如String类,我们在使用时,便能确保我们的引用一定是String对象。
Static关键字修饰变量表静态变量,可以同时被final修饰,表静态常量;需要注意静态变量可以直接通过类名引用,而实例变量则需要new出对象来调用;static修饰方法表静态方法,注意静态方法内部只能调用静态方法,原因同上。
super关键字用于子类调用父类的成员属性、成员方法和构造方法;当子类的成员变量覆盖了父类的成员变量或重写了父类方法,就可以用super.父类变量或super.父类方法名;来实现调用父类的成员属性、成员方法;当我们写子类构造方法时,会有一个super();这就是调用了父类的无参构造。
this关键字代表当前对象,简单来说:this就是所在方法所属对象的引用,就是哪个对象调用了this所在方法,this就代表哪个对象。
3.重载与重写的区别:
共同点:方法名都必须相同
不同点:重写必须发生在子父类之间,重载可以不在子父类之间。
重写:参数列表完全相同(个数、类型、顺序);子类的返回值范围不能大过父类的返回值;
重载:发生在同一个类或子父类之间,而参数列表至少要满足个数不同、类型不同、顺序不同中的一个条件。
4.访问修饰符:
访问修饰符用于修饰类、成员属性、成员方法、构造方法;目的是限制访问
Public:在此项目中的任何位置都可以被访问
Protected :表示只能被同包的其他类访问,如果在包外则只能被其子类访问
默认:表示只能被同包下的类访问
Private:表私有,该成员只能被本类的其他成员访问
5.Java的序列化
序列化是把Java对象保存到储存介质中;而反序列化是把储存介质中的数据转化为Java对象;进行序列化必须实现Serializable接口。那什么时候需要用到序列化呢,如:使用Hibernate二级缓存或其他缓存服务器,必须实现序列化接口;使用Dubbo远程调用服务时,实体类必须实现系列化接口。