/*定义接口 测试*/
//定义接口
public interface Inter {
/*只有静态常量,没有成员变量*/
// int age;报错:Variable 'age' might not have been initialized
/*静态常量实际上的写法:public static final 数据类型 变量名=变量值;
可以简写为: 变量类型 变量名=变量值;*/
public static final String kind="机器人";
String name="张三";
int age=18;
/*只能有抽象方法,不能有普通方法*/
// public void eat(){}报错:Interface abstract methods cannot have body
/*接口中抽象方法的定义可以简写为: 返回值类型 方法名();
会自动拼接 public abstract*/
public abstract void eat();
void play();
// public Inter(){}报错:接口中没有构造方法
}
1.2实现类与接口建立父子级关系
/*实现类与接口建立父子级关系*/
/*形式:修饰符 class 实现类名 implements 接口名 { 执行体代码 }
* 1.选择不实现接口中的抽象方法,把自己变成抽象类
* 2.选择实现接口中的所有抽象方法 ,把自己不变成一个普通子类*/
//public class InterImpl3 implements Inter{}
// 报错:Class 'InterImpl3' must either be declared abstract or implement abstract method 'eat()' in 'Inter'
/*abstract public class InterImpl implements Inter{}//选择不实现接口中的抽象方法,把自己变成抽象类*/
public class InterImpl implements Inter{//选择实现接口中的所有抽象方法 ,把自己不变成一个普通子类
int age=19;
String colcr;//实现类中可以定义属性
char gander='男';//实现类中可以定义属性
public InterImpl() {
super();//若实现类没有明确的父类,默认继承顶级父类object的无参构造
System.out.println("实现类中是有构造方法的!!!");
}
@Override
public void eat() {
System.out.println(name+"敲代码也别忘记干饭!!!");//可以在实现类中调用接口的静态常量
}
@Override
public void play() {
System.out.println("张三,你都"+age+"岁了!不要玩了");//可以在实现类中调用接口的静态常量
}
}
1.3接口测试
/*接口 测试*/
public class Test {
public static void main(String[] args) {
/*不是类,不能实例化*/
// Inter i=new Inter();报错:Inter' is abstract; cannot be instantiated
Inter i1=new InterImpl();//实现类中是有构造方法的!!!
i1.eat();//张三敲代码也别忘记干饭!!!
i1.play();//张三,你都19岁了!不要玩了
// Inter.play();报错:Non-static method 'play()' cannot be referenced from a static context
/*接口中的静态属性可以通过对象和接口名调用*/
System.out.println(i1.name);//张三
System.out.println(Inter.name);//张三
System.out.println(i1.age);//18
System.out.println(Inter.age);//18
System.out.println(i1.kind);//机器人
System.out.println(Inter.kind);//机器人
}
}