//【接口】
//抽象类与普通类相比最大的特点是约定了子类的实现要求,
//但是抽象类存在单继承局限。如果要约定子类的实现要求并避免单继承局限就需要使用接口。
//接口的基本概念,接口就是抽象方法和全局常量的集合,在Java中接口使用interface关键字定义
//子类如果要想使用接口,就必须使用implements关键字来实现接口
//一个子类可以实现多个接口,可以使用接口来实现多继承的概念
//对于接口的子类(不是抽象类)必须覆写接口中的全部抽象方法。
//随后可以利用子类的向上转型通过实例化子类来得到接口的实例化对象。
//一个抽象类可以使用implements实现多个接口,但是接口不能继承抽象类
//eg:
//接口1
interface Imessage{
public static final String MSG="i am a boy"; //定义一个全局常量
public abstract void print(); //定义一个抽象方法
}
//接口2
interface INews{
public abstract String getNews(); //定义一个抽象方法
}
//实现多继承
class MessageImpl implements Imessage,INews{
//覆写接口1中的抽象方法
public void print(){
System.out.println(Imessage.MSG);
}
//覆写接口2中的抽象方法
public String getNews(){
return Imessage.MSG;
}
}
//接口的使用限制:只允许使用public权限
//eg:
interface IMessage{
public static final String MSG="this is a msg";
public abstract void println();
}
//可以简化为
interface Imessage{
String MSG="this is a msg";
void print();
}
//当一个子类即需要实现接口又需要继承抽象类时,请先使用extends继承一个抽象类,而后使用implements 实现多个接口。
//eg:
interface IMessage{
public void print();
}
abstract class News{
public abstract void getNews();
}
class MessageImpl extends News implements IMessage{
public void print() {
System.out.println("I am a biter") ;
}
public void getNews() {
System.out.println("I am News") ;
}
}
public class Test {
public static void main(String[] args) {
IMessage m = new MessageImpl();
m.print();
//MessageImpl是抽象类和接口的共同子类
News news = (News) m;
news.getNews();
}
}