精华内容
下载资源
问答
  • 这是一个看似简单其实挺有深意的题目,答案应该大多数人都知道是什么,不过原理和原因相比很少有人仔细研究过。对于本题,我有三点说明,希望看到这个评论的人能从这三点中看到你以前没注意到的东西: ①接口声明...

     

    这是一个看似简单其实挺有深意的题目,答案应该大多数人都知道是什么,不过原理和原因相比很少有人仔细研究过。对于本题,我有三点说明,希望看到这个评论的人能从这三点中看到你以前没注意到的东西: 
    ①接口的声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但是java没有这个关键字,但权限上可以理解为default),无论是private还是protected都是不可以的。 
    ②关于修饰符大小的说明:public>protected>默认>private,用一张表就是如下: 
     
    ③综合①②,问题出现了,为什么protected的权限比默认权限要高,但是却不能使用它修饰类或者接口呢?原因何在?本题评论如此之少,也没有人深入揭示问题所在,都只是说什么由于需要被其他包其他类实现,所以就是public,那么对于默认修饰符的存在你们怎么解释?我简单说明一下:首先,这里对于接口声明的默认修饰符,可不是像接口中的方法那样,不写修饰符就默认是public了,接口的声明不写修饰符就是default权限,只能同包的类可以访问,其他包是不行的,不信试试看。其次虽然protected权限要比默认权限高,但是对于类或者接口的声明却不能使用,可以简单这么理解:一个外部类或者接口,它的上一层结构是包,因此他们只有两个作用域:同包,任意位置。除此之外的权限没有任何意义,而基于此,public和默认权限就是足够的了,不需要使用protected这种多余的权限造成更为复杂的类关系,因此java限制了类或接口的声明,就仅限于public和默认。

    转载于:https://www.cnblogs.com/sunyubin/p/9720691.html

    展开全文
  • 声明一个播放器接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。设计一个窗体程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序,单击MP3按钮...

    声明一个播放器接口IPlayer,包含5个接口方法:播放、停止、暂停、上一首和下一首。设计一个窗体程序,在该程序中定义一个MP3播放器类和一个AVI播放器类,以实现该接口,最后创建相应类的实例测试程序,单击MP3按钮后,再单击“播放”按钮的效果。与此类似,如果单击AVI按钮后,再单击播放按钮则应显示“正在播放AVI视频!”。

    设计界面

     

    编写代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace 播放器接口
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            IPlayer ip;
            MP3 m;
            AVI a;
            //MP3歌曲
            private void button1_Click(object sender, EventArgs e)
            {
                m = new MP3();
                ip = (IPlayer)m;
            }
            //AVI视频
            private void button2_Click(object sender, EventArgs e)
            {
                a = new AVI();
                ip = (IPlayer)a;
            }
            //上一首
            private void button3_Click(object sender, EventArgs e)
            {
                if (a is IPlayer || m is IPlayer)
                {
                    label1.Text = "\n" + ip.Pre();
                }
                else
                {
                    MessageBox.Show("请选择MP3歌曲或AVI视频");
                }           
            }
            //停止
            private void button4_Click(object sender, EventArgs e)
            {
                if (a is IPlayer || m is IPlayer)
                {
                    label1.Text = "\n" + ip.Stop();
                }
                else
                {
                    MessageBox.Show("请选择MP3歌曲或AVI视频");
                } 
            }
            //播放
            private void button5_Click(object sender, EventArgs e)
            {
                if (a is IPlayer || m is IPlayer)
                {
                    label1.Text = "\n" + ip.Play();
                }
                else
                {
                    MessageBox.Show("请选择MP3歌曲或AVI视频");
                } 
            }
            //暂停
            private void button6_Click(object sender, EventArgs e)
            {
                if (a is IPlayer || m is IPlayer)
                {
                    label1.Text = "\n" + ip.Pause();
                }
                else
                {
                    MessageBox.Show("请选择MP3歌曲或AVI视频");
                } 
            }
            //下一首
            private void button7_Click(object sender, EventArgs e)
            {
                if (a is IPlayer || m is IPlayer)
                {
                    label1.Text = "\n" + ip.Next();
                }
                else
                {
                    MessageBox.Show("请选择MP3歌曲或AVI视频");
                } 
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.Text = "";
            }
        }
        interface IPlayer
        {
            string Play();
            string Stop();
            string Pause();
            string Pre();
            string Next();
        }

        public class MP3 : IPlayer
        {
            public string Play()
            {
                return "正在播放MP3歌曲!";
            }
            public string Stop()
            {
                return "停止播放MP3歌曲";
            }
            public string Pause()
            {
                return "暂停播放MP3歌曲";
            }
            public string Pre()
            {
                return "播放上一首MP3歌曲";
            }
            public string Next()
            {
                return "播放下一首MP3歌曲";
            }
        }

        public class AVI : IPlayer
        {
            public string Play()
            {
                return "正在播放AVI视频!";
            }
            public string Stop()
            {
                return "停止播放AVI视频";
            }
            public string Pause()
            {
                return "暂停播放AVI视频";
            }
            public string Pre()
            {
                return "播放上一首AVI视频";
            }
            public string Next()
            {
                return "播放下一首AVI视频";
            }
        }
    }
     

    运行结果;

    展开全文
  • 接口声明变量的一个实际例子

    千次阅读 2017-12-12 19:55:26
    实际工作中在重写UDTF子类的process方法的时候,遇到了一个forward方法,在研究源码的过程中对接口的概念更为清晰了。 UDTF接口说明如下: Java UDTF需要继承com.aliyun.odps.udf.UDTF类。这个类需要实现4个接口。...
    java自学者,如果错误,还请多多指教。实际工作中在重写UDTF子类的process方法的时候,遇到了一个forward方法,在研究源码的过程中对接口的概念更为清晰了。
    UDTF接口说明如下:
    Java UDTF需要继承com.aliyun.odps.udf.UDTF类。这个类需要实现4个接口。
    接口定义
    描述
    public void setup(ExecutionContext ctx)
    throws UDFException
    初始化方法,在UDTF处理输入数据前,调用用户 自定义的初始化行为。在每个Worker内setup会 被先调用一次。
    public void process(Object[] args)
    throws UDFException
    这个方法由框架调用,SQL中每一条记录都会对 应调用一次process,process的参数为SQL语句 中指定的UDTF输入参数。输入参数以Object[]的 形式传入,输出结果通过forward函数输出。用 户需要在process函数内自行调用forward,以决 定输出数据。
    public void close() throws UDFException
    UDTF的结束方法,此方法由框架调用,并且只会 被调用一次,即在处理完最后一条记录之后。
    public void forward(Object ...o)
    throws UDFException
    用户调用forward方法输出数据,每次forward 代表输出一条记录。对应SQL语句UDTF的as子句 指定的列。
    其中forward方法如下
    protected void forward(Object... outs) throws UDFException {
    this.collector.collect(outs);
    }
    collector是接口UDTFCollector声明的变量,
    private UDTFCollector collector;
    UDTFCollector声明如下的collect方法,
    public interface UDTFCollector extends DataCollector {
    void collect(Object[] var1);
    }
    既然forward方法是用户输出数据的方法,那它究竟如何传递参数呢?这就是接口声明一个变量的用处了。
    接口通常被使用在Java编程语言,用来做回调函数使用 。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,
    把这个接口当成方法的参数,以此来使用该项对象的方法签名。问题又来了,那什么是方法签名呢?
    所谓方法签名就由方法名+形参列表构成,也就是说,方法名和形参数据类型列表可以唯一的确定一个方法,与方法的返回值一点关系都没有,
    而这也是判断重载重要依据。
    于是归纳如下,forward方法使用UDFCollector声明的collector里面的collect方法,于是给forward传参时就确定了一个对应的方法签名从而在UDTF函数
    解析出输出参数。
    展开全文
  • 不是接口变量,而是一个接口类型的引用指向了一个实现给接口的对象,这是java中的一种多态现象 ,java中的接口不能被实例化,但是可以通过接口引用指向一个对象,这样通过接口来调用方法可以屏蔽掉具体的方法的实现...
           不是接口变量,而是一个接口类型的引用指向了一个实现给接口的对象,这是java中的一种多态现象 ,java中的接口不能被实例化,但是可以通过接口引用指向一个对象,这样通过接口来调用方法可以屏蔽掉具体的方法的实现,这是在JAVA编程中经常用到的接口回调,也就是经常说的面向接口的编程
    
    展开全文
  • JAVA接口声明

    千次阅读 2017-09-27 19:57:53
    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java...但是可以声明接口变量Comparable x; //这是允许的。 用JAVA接口声明一个变量是什么意思? 不是接口变量,而是一个
  • package lianxi; public interface jiekou { public static final double PI = 3.1415926; public double area(); } package lianxi;...public class shixian implements jiekou { ... public s...
  • 如题所述,当一个接口被多个子类实现时,Spring框架怎样从容器中正确取出我们想要的实例呢? (定义了CommonService接口,同时有个两个子类实现了这个接口,同时两个实现类上都加了@Service注解,表明在项目启动...
  • 一个java接口实例

    千次阅读 2017-06-12 22:47:57
    http://www.51testing.com/html/91/183791-212007.html ... ...在java中,定义一个接口声明计算长方形面积和周长的抽象方法,再用一个类去实现这个接口,再编写一个测试类去使用这个接口。 calrect.java
  • Java接口声明对象

    千次阅读 2015-10-11 16:40:28
    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口...但是可以声明接口变量Comparable x; //这是允许的。 用JAVA接口声明一个变量是什么意思? 不是接口变量,而是一个接口类型的
  • 接口声明变量

    千次阅读 2018-05-02 03:28:20
    经常见List<?> list= new ArrayList&...但是发现list只是ArrayList的接口不是它的父类 ,不是父类引用指向子类对象如果是应该是AbstractLIst ablist= new ArraryList(); 或者直接写为ArrayL...
  • 接口

    千次阅读 多人点赞 2019-03-15 07:51:43
    接口使用interface关键字来声明一个类,同时接口不能创建对象。如果用接口声明创建对象时只能用接口中的变量。 一个类实现接口时,必须实现接口中的所有抽象方法。 实现接口使用implements 关键字。 接口以具有...
  • java接口声明和使用

    千次阅读 2019-11-13 19:22:33
    接口的出现就是为了让java程序的一个类可以实现多个接口,克服单继承的缺点。 接口声明: interface 接口的名字 //接口体 interface Computable{ int MAX=100; int f(int x);//接口方法体 } class China ...
  • 也可同时继承自 一个接口,继承接口的方法并完成定义。有一个神奇的魔法:同一种对象,都是IAct对象,调用同一种方法Act() 。但是执行的情况却完全不一样。要注意的是,一个接口类对象,只能执行接口里的方法,即使...
  • 实现一个注解接口

    千次阅读 2016-03-22 23:47:03
    我的网站 对于 Java 程序员来说使用注解就是日常任务,先不说别的,@Override 注解那是再...不过我们很少实现一个注解接口,因为有人秘密地为我们实现了。 当我们有这样一个注解: @Retention(RetentionPolicy.RUN
  • 可以声明接口,但不可以new接口

    千次阅读 2014-05-02 13:08:47
    接口种特殊的抽象类,它包含常量和方法的声明,但没有方法的实现;可以把接口看成是种特殊的抽象类; 接口实质上是种规范,它关心的是“做什么”,不关心“怎样做”; 接口中的字段都是最终(final)、静态...
  • 基本概念这实例是子类的,但是因为你声明时是用父类声明的,所以你用正常的办法访问不到子类自己的成员,只能访问到从父类继承来的成员。在子类中用override重写父类中用virtual申明的虚方法时,实例化父类调用该...
  • “不如直接就在这个类中写实现方法岂不是更便捷”,你怎么保证这个接口一个类去实现呢?如果多个类去实现同一个接口,程序怎么知道他们是有关联的呢? 既然不是一个类去实现,那就是有很多地方有用到,大家需要...
  • JAVA基础——接口(全网最详细教程)

    万次阅读 多人点赞 2018-05-10 09:46:42
    官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 我的解释:接口...
  • interface Animal // 声明接口Animal { abstract void run();// 定义抽象方法 } class Bird implements Animal // 实现接口 { public void run() { System.out.println("测试run方法成功"); } } clas
  • Java接口类只能声明静态属性

    千次阅读 2015-09-15 10:19:04
    Java的接口声明属性时会发现一个很奇怪的现象, 可能大家在很多地方都会看到这样的描述: 接口类中的只能有静态的属性, 但是在实际写代码中你会发现, 可以在接口声明一个不是静态的属性, 并且不会报错, 如下: ...
  • import java.util.Scanner; interface CircleArea { double PI = 3.14; public void Area(); } class Circle implements CircleArea { double r; Circle(double r) ... public void Area()...
  • Java接口 详解(

    万次阅读 多人点赞 2016-10-06 00:46:42
    一、基本概念接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合。接口通常以interface来声明一个类通过继承接口的方式,从而来继承接口的抽象方法。如果一个类只由抽象方法和全局常量组成,...
  • Java 枚举类和自定义枚举类和enum声明及实现接口1....若枚举只有一个成员, 则可以作为一种单例模式的实现方式 1.枚举类的属性 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰...
  • import java.util.Scanner;interface CircleArea{ static double PI=3.14; double area();}class Circle implements CircleArea{ double radius; public Circle(double r){  this.radius=r;...
  • 刚开始直接用url后面拼接字符串的方式传参,但是汉字接收不到,估计是...// 声明 RedirectAttributes public String handleServiceOrder(RedirectAttributes attributes) { // 重定向,传参 attributes.addFlashA...
  • C++:如何正确的定义一个接口

    万次阅读 多人点赞 2018-06-18 15:54:38
    C++中如何定义接口类?C++中如何定义标识接口类?
  • 子类和父类实现同一个接口的意义

    千次阅读 2017-09-30 10:26:36
    在阅读Java.util.ArrayList源码的过程中,我产生了一个小疑惑,ArrayList实现了List这个接口(这没问题,学Java的都知道),但ArrayList的抽象父类AbstractList同样实现了List接口。 想了很久这样设计有什么特别...
  • Java函数式接口一个疑惑:为什么Comparator接口有两个抽象方法compare和equals,Comparator还是一个函数式接口?(@FunctionalInterface)
  • 定义一个接口,并定义相应的类来实现实现接口中的方法 */ public interface Circle {//定义接口 double PI = 3.1415;// 定义常量 void setRadius(double radius);// 定义抽象方法 double area();// 定义抽象...
  • 接口和抽象类的区别是什么 ...一个类可以实现多个接口,但最多只能实现一个抽象类 一个类实现接口的话要实现接口的所有方法,而抽象类不一定 接口不能用 new 实例化,但可以声明,但是必须引用一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 890,395
精华内容 356,158
关键字:

如何声明一个接口