java学习------------------接口

关于java的学习记录:

1.

/**
 * 接口的基本定义:如果一个类之中只是由抽象方法和全局常量所组成,那么在这种情况下不会将其定义为一个抽象类,
 * 而只会将其定义为接口,所谓接口就是一个特殊的类,这个类里面只有抽象方法
 * 接口对象不可能直接实例化
 * 接口必须要有子类,但是此时一个子类可以使用implements关键字实现多个接口
 * 接口的子类(如果不是抽象类)必须要覆写接口中的全部抽象方法
 * 接口的对象可以利用子类对象向上转型进行实例化操作
 * 一个接口可以通过extends关键字继承多个接口,接口不能为继承抽象类
 * 在java里面。接口的主要功能是解决单继承问题
 * 在接口里面可以定义普通内部类、抽象内部类、内部接口
 * 在一个接口内部如果使用了static去定义一个内部接口表示是一个外部接口
 */
public class Demo1 {
/**
 * 接口在实际的开发之中有三大核心作用:
 * 1.定义不同层之间的操作标准
 * 2.表示一种操作的能力
 * 3.表示将服务器端的远程方法视图暴露给客户端
 */
    public static void main(String[] args) {
//        X x=new X();//实例化子类对象
//        A a=x;//向上转型
//        B b=x;
//        a.print();
//        b.get();
        A a=new X();
        B b=(B)a;
        b.get();
        C c=(C)b;
        c.change();
        System.out.println(a instanceof A);
        System.out.println(a instanceof B);
        //在定义结构上,A和B接口没有直接联系,但是这两个接口却拥有同一个子类
    }

}
interface A{
    public static final String MSG="hello";//全局常量
    public abstract void print();//抽象方法
}
//可以如下写法:接口里面最终访问权限是public
//interface A{
//    String MSG="hello";//全局常量
//    void print();//抽象方法
//}
interface B{
    public abstract void get();
}
abstract class C{
    public abstract void change();
}
class X extends C implements A,B{
    public void print() {
        System.out.println("A接口的抽象方法");
    }
    public void get() {
        System.out.println("B接口的抽象方法");
    }
    public void change() {
        System.out.println("C抽象类的抽象方法");
    }
}

2.

/**
 * 接口的实际应用---标准
 */
public class Demo2 {

    public static void main(String[] args) {
        Computer com=new Computer();
        com.plugin(new Flash());
        com.plugin(new Print());
    }

}
//标准可以连接不同层的操作类
interface USB{
    public void start();
    public void stop();
}
class Computer{
    public void plugin(USB usb) {  //插入
        usb.start(); //固定操作
        usb.stop();
    }
}
class Flash implements USB{
    public void start() {
        System.out.println("U盘开始使用");
    }
    public void stop() {
        System.out.println("U盘停止使用");
    }
}
class Print implements USB{
    public void start() {
        System.out.println("打印机开始使用");
    }
    public void stop() {
        System.out.println("打印机停止使用");
    }

}

3.

public class Demo3 {

    public static void main(String[] args) {
        Fruit f=Factory.getInstance("orange");
        f.eat();
    }

}
interface Fruit{
    public void eat();
}
class Apple implements Fruit{
    public void eat() {
        System.out.println("***,吃苹果");
    }
}
class Orange implements Fruit{
    public void eat() {
        System.out.println("***,吃橘子");
    }
}
class Factory{
    public static Fruit getInstance(String className) {
        if("apple".equals(className)) {
            return new Apple();
        }else if("orange".equals(className)) {
            return new Orange();
        }else {
            return null;
        }
    }

}

4.

/**
 * 接口的应用---代理设计模式proxy
 * 代理设计模式的核心精髓就在于有一个主题操作接口(可能有多种方法),
 * 核心业务主题只完成核心功能,而代理主题负责完成各种与核心业务相关的功能
 */
public class Demo4 {

    public static void main(String[] args) {
        Subject sub=new ProxySubject(new RealSubject());
        sub.make(); //调用的是代理主题操作
    }

}
interface Subject{//整个操作的核心主题
    public void make();//整个临幸的核心功能
}
class RealSubject implements Subject{
    public void make() {
        System.out.println("核心主题");
    }
}
class ProxySubject implements Subject{
    private Subject subject;
    //要接受一个真实主题的操作对象
    public ProxySubject(Subject subject) {
        this.subject=subject;
    }
    public void prepare() {
        System.out.println("核心主题前的准备");
    }
    public void make() {
        this.prepare();
        this.subject.make();//告诉皇帝可以开始了
        this.destroy();
    }
    public void destroy() {
        System.out.println("核心主题完成后的操作");
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值