接口
特殊的“抽象类”
所有的方法都是抽象方法,所有方法都不提供具体的实现。
####与类相似方面:
1.接口可以有任意数量的方法;
2.接口以“.java”为后缀,接口名与文件名匹配;
3.接口编译后以“.class”为后缀的字节码文件;
4.在包中的接口,其相应的字节码文件必须放置在和包名称相匹配的一个目录结构中。
不同之处:
1. 接口不能被实例化;
2. 接口不能包含任何构造器
3. 接口中的所有方法都是抽象的
4. 接口中不能包含实例成员变量。唯一可以出现在接口中的成员变量必须是同时声明为static和final
5. 接口不能被一个类继承,只能被一个类来实现
6. 一个接口能够继承多个接口
###接口声明
接口默认是抽象的
接口内的方法也是默认抽象的,不能关键字abstract
接口方法访问级别是public
public interface 接口名{
//任意数量的final ,static 成员变量
//任意数量的抽象方法声明
}
接口实现
实现接口中定义的所有方法或声明自己为抽象类
public class 类名 extends 父类名 implements 接口名
接口应用
接口可以用于暴露类的行为,允许类的用户通过接口的实现类来使用接口中的方法
掊可以用于强制一个类具有某些行为
接口继承
1. 继承多个接口
2. 标记接口:当父接口不包含任何方法的时候使用(使用宗旨--创建一个通用的父类; 给一个类添加数据类型)
接口与多态
如果一个类实现一个接口,那么这个类的对象就呈现出接口数据类型的特点。对象采用接口形式的这种能力就是多态的一个例子。
接口与抽象类相像
1. 都不能被实例化,它们都位于继承树的顶端,用于被其它类实现或者继承
2. 都可以包含抽象方法,实现接口或者继承抽象类的子类都必须实现这些抽象方法
接口与抽象类的区别
1. 接口中只能包含抽象方法;而抽象类中可以包含普通方法
2. 掊中不能定义静态方法;而抽象类可以定义静态方法
3. 接口中只能定义 静态常量属性,不能定义普通属性;而抽象类既定义普通属性,也可以定义静态常量属性
4. 接口不包含构造器;而抽象类中可以包含构造器。抽象类中的构造器并不是用于创建对象,而是让子类调用这些构造器来完成属于抽象类的初始化工作
5. 接口中不包含初始化块 而抽象类可以包含初始化块
6. 一个类最多有一个直接父类,包括抽象类;但是一个类可以直接实现多个接口,通过实现多个接口来弥补java单继承的不足。
public class People {//声明一个People类
private String name;//声明一个私有成员变量name
private String address;
private int age;
public void eat(){
System.out.println("吃饭");
}
//封装属性
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package classroom1228;
public class Student extends People{
public void eat(){
System.out.println("吃饭");
}public String dictate(){
setName("小天");
return getName();
}
}
package classroom1228;
public class Teacher extends People{//声明一个People的子类Teacher
public void eat(){
System.out.println("吃饭");
}public String teach(){
setName("小红");
setAge(12);
return getName();
}
}
package classroom1228;
public class Test {
public static void main(String[] args) {
Teacher t=new Teacher();
System.out.println(t.teach());
People p=new Teacher();//向上转换
p.eat();
People po=new Student();
// if(p instanceof Student){//不是继承关系
if(po instanceof Student){//是继承关系
System.out.println("是继承类");
Student st=(Student)po;//向下强转为Student类
System.out.println(st.dictate());
}else{
System.out.println("不是继承类");
}
// p.teach();//在People内没有该方法
Teacher te=(Teacher)p;
System.out.println(te.teach());
People pe=new Student();//将学生类实例化为人类
Student s=(Student)pe;//将人类强转为学生类
System.out.println(s.dictate());
}
}

浙公网安备 33010602011771号