zoukankan      html  css  js  c++  java
  • Interface, 接口的实现初解

    百度是这么说的:

      Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
      两种含义:
        一,Java接口,Java语言中存在的结构,有特定的语法和结构;
        二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
    用代码来解释什么叫接口, 需要建很多才能解释清楚了, 简单整理了一下
     
    首先定义几个接口
    public interface I_cpu {
        public void yunsuan();
        public String getPinpai();
    }
    public interface I_display {
        public void xianshi();
        public String getPinpai();
    }
    public interface I_longx extends I_cpu, I_display {
        public void cunchu();
        public String yingpan = null;
        public String yingpan();
    }

    上面定义了三个接口, 用组装电脑来简单举个例子, 在写接口的时候要注意以下几点(非常重要)

    1, 接口中只需要写方法或者属性, 方法不需要写方法体, 只需要写个public void yunsuan();这玩意就行了, 方法体在后面实体类里面写

    2, 接口中定义的方法, 只能使用public和abstract来修饰, 不能使用private或是protect

    3, 接口中可以定义属性, 但是定义的属性会默认有这几个关键字——Public, Final, Abstract

    4, 接口中定义的属性,必须初始化, 就是必须赋初始值

    5, 如果一个类引用了两个或者多个接口, 必须包含所引用接口的所有属性和方法

    下面是定义的三个类, 这三个类分别是继承了接口; 继承了两个接口, 继承了一个接口, 但是这个接口又继承了两个接口:

    public class Intel implements I_cpu {
        @Override
        public void yunsuan() {
            // TODO Auto-generated method stub
            System.out.println("Intel正在运算...");
        }
        @Override
        public String getPinpai() {
            return "Intel";
        }
    }
    public class AMD_Display implements I_cpu, I_display {
        @Override
        public void xianshi() {
            System.out.println("显示图形图像");
        }
        @Override
        public void yunsuan() {
            System.out.println("带显卡的CPU正在运算...");
        }
        @Override
        public String getPinpai() {
            return "CPU&DISPLAY";
        }
    }
    public class Longxin implements I_longx {
        @Override
        public void yunsuan() {
            System.out.println("龙芯正在运算...");
        }
        @Override
        public String getPinpai() {
            return "龙芯";
        }
        @Override
        public void xianshi() {
            System.out.println("show picture");
        }
        @Override
        public void cunchu() {
            System.out.println("save data");
        }
        @Override
        public String yingpan() {
            return "冠捷硬盘";
        }
    }

    这样再写一个实现类, 就可以使用这些类和接口了

    public class Run {
        //实现通过接口定义的方法
        public static void main(String[] args) {
            //组装第一台电脑
            Computer c1 = new Computer();
            Intel cpu = new Intel();
            c1.setCpu(cpu);
            //直接实例化赋值的叫匿名对象
            c1.setDisplay(new Display());
            c1.run();
            System.out.println();
    //组装第二台电脑 Computer c2 = new Computer(); c2.setCpu(new AMD()); c2.setDisplay(new Display()); c2.run(); System.out.println();
    //组装第三台电脑 Computer c3 = new Computer(); c3.setAd(new AMD_Display()); c3.setLx(new Longxin()); c3.Run(); } }

    抽象类和抽象方法

    在定义类的过程中难免会遇到一种情况, 一个类里面有一个方法没法实现, 但是这个方法又不能舍弃, 这时候就可以使用抽象方法(abstract)

    public abstract class Longxin implements I_longx {
            ......
        public abstract void xianshi();
            ......
    }

    注意: 在一个类里面, 如果有一个方法变成了抽象方法, 那么这个类也必须定义成抽象类(即加上关键字abstract)

    这个抽象类再使用的时候就要用另一个类来继承它, 在另一个类里面定义这个抽象方法的方法体

    public class Longxin2 extends Longxin {
        @Override
        public void xianshi() {
            System.out.println("Longxin2的xianshi方法");
        }
    }

    实现类中的代码改成这样, 重新实例化Longxin类, 就可以正常调用方法了

            Computer c3 = new Computer();
            Longxin lx = new Longxin2();
            c3.setLx(lx);
            c3.Run();
  • 相关阅读:
    Shell面试题4:扫描网络内存活主机案例
    第三题批量创建特殊要求用户案例
    chpasswd 更简单的更改密码的方式
    30题之第二题
    shell30题之第一题
    2019牛客多校第四场B xor——线段树&&线性基的交
    POJ 2893 M × N Puzzle——八数码有解条件
    2019HDU多校第四场 Just an Old Puzzle ——八数码有解条件
    2019HDU多校第三场F Fansblog——威尔逊定理&&素数密度
    威尔逊定理
  • 原文地址:https://www.cnblogs.com/wgbs25673578/p/5151295.html
Copyright © 2011-2022 走看看