9.7 接口基本定义

demo1 接口简单基本定义

interface IMessage {// 定义接口
    public static final String INFO = "www.baidu.com";// 全局常量
    public abstract String getInfo();
}

class MessageImpl implements IMessage {// 实现了接口
    public String getInfo(){
        return "得到一个好消息!!";
    }
}

public class HelloWorld {
	public static void main(String args[]) {
        IMessage msg = new MessageImpl();
        System.out.println(msg.getInfo());
        System.out.println(IMessage.INFO);// 直接输出全局常量

	}
}

demo2 java类单继承的局限,在接口上得到了弥补

interface IMessage {
    public static final String INFO = "www.baidu.com";
    public abstract String getInfo();
}
interface IChannel {
    public abstract boolean connect();
}
class MessageImpl implements IMessage,IChannel {
    public String getInfo(){
        if(this.connect()){
            return "得到一个消息,有人胖了(不是我)";
        }
        return "通道创建失败,无法获取消息";
    }
    public boolean connect(){
        System.out.println("消息发送通道已经成功建立");
        return true;
    }
}

public class HelloWorld {
	public static void main(String args[]) {
        IMessage msg = new MessageImpl();
        System.out.println(msg.getInfo());
        //System.out.println(IMessage.INFO);// 直接输出静态常量
	}
}

demo3

interface IMessage {
    public static final String INFO = "www.baidu.com";
    public abstract String getInfo();
}
interface IChannel {
    public abstract boolean connect();
}
class MessageImpl implements IMessage,IChannel {
    public String getInfo(){
        if(this.connect()){
            return "得到一个消息,有人胖了(不是我)";
        }
        return "通道创建失败,无法获取消息";
    }
    public boolean connect(){
        System.out.println("消息发送通道已经成功建立");
        return true;
    }
}

public class HelloWorld {
	public static void main(String args[]) {
        IMessage msg = new MessageImpl();
        IChannel chl = (IChannel) msg;// 直接转型IChannel---因为msg是IMessage,IChannel接口的子类;
        System.out.println(chl.connect());
        //System.out.println(IMessage.INFO);// 直接输出静态常量
	}
}
  • Object类对象可以接收所以的数据类型,包括:基本数据类型,类对象,接口对象,数组。
  • 方法不写访问权限也是public,不是default,所以覆写的时候,只能使用public。

demo4

interface IMessage {
    public static final String INFO = "www.baidu.com";
    public abstract String getInfo();// 接口中abstract可以省略
}
interface IChannel {
    public abstract boolean connect();
}
abstract class DatabaseAbstract {
    public abstract boolean getDatabaseConnection();// abstract关键词不能省略
}
class MessageImpl extends DatabaseAbstract implements IMessage,IChannel {
    public String getInfo(){
        if(this.connect()){
            if(this.getDatabaseConnection()){
                return "【数据库消息】www.baidu.com";
            } else {
                return "数据库无法访问";
            }
        }

        return "【默认消息】" + IMessage.INFO;
    }

    @Override
    public boolean connect(){
        return true;
    }

    @Override
    public boolean getDatabaseConnection(){
        return true;
    }
}

public class HelloWorld {
	public static void main(String args[]) {
        IMessage msg = new MessageImpl();
        System.out.println(msg.getInfo());
	}
}
  • 虽然接口无法去继承一个父类,但一个接口却可以通过extends继承若干个父接口,此时称为接口的多继承.

demo5 接口的多继承

interface IMessage {
	public static final String INFO = "www.mldn.cn"; 			// 全局常量
	public abstract String getInfo() ;
}
interface IChannel {
	public boolean connect() ;								// 抽象方法
}

// extends在类继承上只能够继承一个父类,但是接口上可以继承多个---!!!!
// extends接口上可以多继承,类上不行!
interface IService extends IMessage,IChannel {					// 接口多继承
	public String service() ;									// 抽象方法
}

class MessageService implements IService {						// 三个接口子类
	@Override
	public String getInfo() {									// 方法覆写
		return IMessage.INFO ;
	}
	@Override
	public boolean connect() {								// 方法覆写
		return true ;
	}
	@Override
	public String service() {									// 方法覆写
		return "MLDN消息服务:www.mldn.cn" ;
	}
}
posted @ 2023-06-10 10:32  盘思动  阅读(26)  评论(0)    收藏  举报