《java入门第一季》之面向对象接口面试题

首先,(1)叙述接口的成员特点:

/*
	接口成员特点
		成员变量;只能是常量,默认都是常量,并且是静态的。
				默认修饰符:public static final
				建议:自己手动给出类似:public static final int num3 = 30;的格式
		构造方法:接口没有构造方法。
		成员方法:默认只能是抽象方法。
				默认修饰符:public abstract
				建议:自己手动给出。
		
用几行代码验证上述特点。
*/
interface Inter {
	public int num = 10;
	public final int num2 = 20;
	public static final int num3 = 30;//(默认)的,但是建议自己自动给出所有修饰
	
	//错误: 需要<标识符>,说明接口没有构造方法。
	//public Inter() {}
	
	//接口方法不能带有主体{},因为接口方法是没有内容的,说明只能是抽象方法。
	//public void show() {}

	//abstract void show(); //默认public,权限最大,因此在子类方法重写的时候访问权限不能更低,父类public子类更应该public建议字符类的权限修饰符都一样
	public void show(); //默认abstract,建议都写成:public abstract void show();
}

/*
class InterImpl implements Inter {
	public InterImpl() {
		super();
	}
}
*/

class InterImpl extends Object implements Inter {//类实现接口。class 类名 implements接口名{} 
	public InterImpl() {//子类默认继承于object中的无参构造方法
		super();
	}
	
	public void show() {}
}

//测试类
class InterfaceDemo2 {
	public static void main(String[] args) {
		//创建对象
		Inter i = new InterImpl();//多态的方式,
		System.out.println(i.num);
		System.out.println(i.num2);
		System.out.println(i.num3);
		//i.num = 100;
		//i.num2 = 200;
		//System.out.println(i.num); //无法为最终变量num分配值
		//System.out.println(i.num2);//无法为最终变量num2分配值,验证了final修饰
		System.out.println(Inter.num);
		System.out.println(Inter.num2);//接口名称调用成员,说明有static修饰
		System.out.println(Inter.num3);
		System.out.println("--------------");
	}
}

(2)、抽象和接口比较:

抽象类和接口的区别:
A:成员区别
	抽象类:
		成员变量:可以变量,也可以常量
		构造方法:有
		成员方法:可以抽象,也可以非抽象
	接口:
		成员变量:只可以常量而且是静态
                构造方法:无
               成员方法:只可以抽象
		
B:关系区别
	类与类
		继承,单继承
	类与接口
		实现,单实现,多实现
	接口与接口
		继承,单继承,多继承
		
C:设计理念区别
	抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。向上抽取
	接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。属于特性的东西


原文地址:https://www.cnblogs.com/wanghang/p/6299851.html