java面试宝典读书笔记(四)-继承与接口

第10章、继承与接口


1、接口:广义的接口:凡是为一个类提供给外部使用的部分都可以被称为接口,广义接口真正的意义在于继承中体现多态的功能。狭义接口是指特定的函数集合一般用interface声明,他表示一个方法集合。

2、成员函数重载:(1)相同的范围(同一类中)(2)函数名字相同。(3)参数不同。覆盖:(1)不同范围(派生类与基类)(2)函数名字相同(3)参数相同。

3、继承:是一种通过扩展一个已有的对象的额实现,从而获得新功能的复用方法。泛化类可以显示的捕捉那些公共的属性和方法,特殊类的则通过附加属性和方法进行实现扩展。继承会破坏封装性,因为会将父类的实现细节暴露给子类。继承本质上属于白盒式代码复用。(组合:黑盒式代码复用)

class A{
	public void printValue(){
		System.out.println("classA");
	}
}
 class B extends A{
public void printValue(){
	System.out.println("classB");
}	
}
public class test {
public static void main(String[] args) {
	B b=new B();
	b.printValue();//classB
	A a=(A)b;
	a.printValue();//classB孔子装爹但还是孔子,所以只能调用孔子的方法。
	 A a1=new A();
	 a1.printValue();//classA
	}  
}
如果是静态方法就不一样了

class A{
	public static void printValue(){
		System.out.println("classA");
	}
}
 class B extends A{
public static void printValue(){
	System.out.println("classB");
}	
}
public class test {
public static void main(String[] args) {
	B b=new B();
	b.printValue();
	 A a1=new B();
	 a1.printValue();
	}  
}
结果是classB,classA。静态方法内存中地址固定,两个方法占用不同的空间具体执行哪一个看那个类调用。

4、super:子类的构造函数如果要引用super必须要把super放在函数的首部。为什么?子类是从父类继承而来,继承了父类的属性和方法,如果在子类中先不完成父类的成员的初始化,则子类无法使用,应为在java中不允许调用没初始化的成员。在构造器中是顺序执行的,也就是说必须在第一行进行父类的初始化。而super能直接完成这个功能。子类会掩盖掉父类的同名方法或者变量如果想使用就用super关键字。

5、this关键字:使用在一个函数成员的内部指向当前对象,

class test {
	int var;
	test(double var){
		this.var=(int )var;
	}
	test(int var){
		this("hello");
	}
	test(String s){
		this();
		System.out.println(s);
	}
	test(){
		System.out.println("word");
	}
public static void main(String[] args) {
	test t=new test(5);
	}  
}

输出word hello。

6、抽象类与接口:抽象类:1)只能当做其他类的基类不能直接被实例化对抽象类不能使用new操作符。2)抽象类允许包含抽象成员但不是必须的。可以有非抽象方法。3)抽象类不能同时是final。4)如果一个类继承抽象类则必须通过覆盖实现所有继承而来的抽象成员。5)抽象类可以被抽象类继承结果仍是抽象类。6)抽象类容易被声明。

7、java集合类继承关系:

java面试宝典读书笔记(四)-继承与接口_第1张图片

8、java接口:1)接口用于描述对外提供的公共服务,因此接口中的成员常量和方法必须是共开的确保外部使用访问他们。2)接口仅仅描述系统能做什么不指明如何做所以接口中方法都是抽象的。3)接口不涉及和具体实现相关的细节,因此接口没有构造方法不能被实例化,没有实例变量,只有静态常量。4)接口中实现类是所有实现类共有的既然共有肯定是不变的东西所以变量是不可变类型也就是常量。5)接口中不可以定义变量。如果定义变量接口的方法又是抽象的,即没有方法可以修改这些属性。

通俗讲你认为变化的东西就放在自己的实现中不能放在接口中去,接口只是对一类事物的更高层次的抽象对修改关闭对扩展开放,接口是对开闭原则的一种体现。所以接口方法默认是public abstract;接口中不可定义变量只可以定义常量缩衣节口默认的修饰符是public static final常量,且必须赋初值。


你可能感兴趣的:(java面试宝典读书笔记)