精华内容
下载资源
问答
  • 一、Java接口中的成员变量为何必须是public static final接口中的成员变量只有一种类型,public static final ,所以可以直接省去修饰符。 为什么接口的变量修饰符必须是public static final 类型呢? ①首先接口是...

    一、Java接口中的成员变量为何必须是public static final

    接口中的成员变量只有一种类型,public static final ,所以可以直接省去修饰符。
    为什么接口的变量修饰符必须是public static final 类型呢?
    ①首先接口是一种高度抽象的”模版”,,而接口中的属性也就是’模版’的成员,就应当是所有实现”模版”的实现类的共有特性,所以它是public static的 ,是所有实现类共有的 。

    ②反问1:假如可以是非static的话,因一个类可以继承多个接口,出现重名的变量,如何区分呢?

    ③反问2:接口中如果可能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了?

    ④反问3:有可变成员变量但对应的方法却无法操作这些变量,虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别呢?

    ④接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用,所以接口中的属性必然是final的。

    二、一个类实现多个接口,同名变量的访问

    interface X {
        public static final String name="123";
    }
    interface Y {
        public static final String name="456";
    }
    public class Z implements X,Y {
        public static void main (String [] args){
            System.out.println(X.name);
            System.out.println(Y.name); 
        }
    }
    /*
     * 运行结果:
     * 123
     * 456
     * */
    展开全文
  • 一个接口A,类B实现了接口A,而接口A的引用作为类B的一个成员变量,怎么理解这种写法??新手不太明白,谢谢大家
  • 我想对于每个Java程序员...而接口中的成员变量,就显得用得少一点,而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而且我觉得大多数不清楚为什么要用static 和 final。下面我们就来解释一下。
        我想对于每个Java程序员来说,接口都不陌生,接口中的方法也经常使用。而接口中的成员变量,就显得用得少一点,
    而对于成员变量为什么必须声明为public static final,可能就更不清楚了,而且我觉得大多数不清楚为什么要用
    static 和 final。下面我们就来解释一下。
    

    一、为什么要用final?

    首先,我们应该明白一个问题。接口,实际上比抽象类更加抽象,它是最高层次的抽象。接口中的所有方法都是抽象方法,不会有任何实现方面的代码,而它的具体实现是要靠实现这个接口的具体类来具体实现的。而且,这个接口中的方法是不可更改的。同样的,接口中的变量也是不可更改的。所以,要声明为final。

    接口是一种协议,协议是所有实现接口的类都必须遵守的。如果变量不是final,那么每个实现接口的类就可以更改这个变量的值,也就违反了OCP原则。

    二、为什么要用static?

    至于这个问题,是和Java语言的本身机制有关。我们知道Java不支持多继承,但是一个类可是现实多个接口。我们假设有两个接口A和B,而类C实现了接口A和B。假设,此时,A和B中都有一个变量N,如果N不是static类型的,那么在C中该如何区分N到底是A的还是B的呢?而,如果是static类型的,我们可以通过A.N和B.N来区别调用A或者B中的成员变量N。

    展开全文
  • 首先我们来看只有final没有static的情况,也就是说每个实现类里面都会一个名字和值都一样的变量(final强调不准改变引用地址),那么在初始化相关实现类的时候,都会单独为这个属性开辟一个存储空间,这个时候问题...
    对待这个问题,我建议用辩证的角度去看待!首先我们来看只有final没有static的情况,也就是说每个实现类里面都会有一个名字和值都一样的变量(final强调不准改变引用地址),那么在初始化相关实现类的时候,都会单独为这个属性开辟一个存储空间,这个时候问题就来了--》不觉得很浪费内存吗?如果我用static关键字修饰了,不管你创建多少个实现类实例,他们都共享这个成员属性并且内存中也只会开销紧够存储这一个属性的内存,而不会每个实例都去开销这个属性所需的内存,这是为毛要用static。反过来,我们看看不用final,只用static的情况,打个比方我们有A,V(名字取的不错)两个实现类,A类中的某个函数需要改变这个属性的值为50才能使逻辑正确,B类中的某个函数需要改变这个属性的值为100才能使逻辑正确,那么问题来了,A类中的函数改成了50美滋滋,B类中的属性也要变成50啊!所以B类在被运用的时候就报错了,这个时候就造成了属性歧义的问题,然而我们加上final这个关键字就不一样了,开发看到这个属性就知道不能再依赖这个属性写逻辑了,所以就自己另写属性,也就避免了后面的奇异性问题。。。或者我们从书本的角度来说,接口本来就是最高层次的抽象,你给我在里面定义普通变量(我至少觉得变量一点不具抽象概念),玩呢?所以直接定死属性值,他的作用我们暂时不用考虑,但是乱用它的风险我们还是规避,仅此而已。或许现在隔壁老王出来说,那我既不用static也不用final为毛也不行呢?我就想说你这个脑子是怎么做到绿万千男人的大事的?接口本来就是为了充分利用多态特性来增加框架扩展性,你在接口里面定义一个name属性,实现类都要去利用它,那万一有的需求根本不需要用到这个属性,而只是单纯的想扩展架构呢?放在这里好看吗?对于这个情况,无论是官方还是个人意见都是在实现类定义自己需要的属性,避免属性值歧义和没有必要的耦合度,所以你在接口中不能也是没有必要去定义一个普通属性,解答完毕,话说市面上的解答花样多的我都看晕了,但是麻烦不能讲清楚真心别乱说,容易误导人。谢谢。
    展开全文
  • }动物接口里面有成员变量a和方法eat();,虽然没有修饰符修饰但是接口默认修饰符,即上面的接口同下面的接口interface animal { public static final int a = 1; public int eat(); }所以接口成员变量都是静态...
    interface animal {
        int a = 1;
        int eat();
    }

    动物接口里面有成员变量a和方法eat();,虽然没有修饰符修饰但是接口都有默认修饰符,即上面的接口同下面的接口

    interface animal {
        public static final int a = 1;
        public int eat();
    }

    所以接口的成员变量都是静态的不可改变的,而且修饰符可以省略;所有的方法都是public修饰的而且也是可以省略的

    展开全文
  • JAVA接口作为成员变量类型

    千次阅读 2019-10-24 16:16:33
    首先创建一个接口Skill public interface Skill { public abstract void use();//施放技能的抽象方法 } 接口的实现类SkillImpl public class SkillImpl implements Skill { @Override public void use() { ...
  • Java接口成员变量和方法默认修饰符(缺省属性) Java的interface接口中,定义成员时由于默认修饰符自动省略,因此,默认修饰符也称为缺省属性。 成员变量默认修饰符为: public static final 成员方法默认修饰符为:...
  • 接口作为成员变量类型 执行结果: 我叫艾希,开始施放技能: Biu~Pia~Biu~Pia~ 施放技能完成。 Process finished with exit code 0 接口作为方法的参数和或返回值 package cn.itcast.day11.demo07; import ...
  • Java接口成员变量和方法默认修饰符

    千次阅读 2017-09-30 22:46:03
    Java接口成员变量和方法默认修饰符  Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final String name...
  • 类作为成员变量类型 String类、自己定义的类都可 接口作为成员变量类型 接口作为方法的参数和返回值
  • Java 使用类作为成员变量

    千次阅读 2020-06-16 13:22:22
    一、类作为成员变量 二、接口作为成员变量
  • “interface”(接口)关键字使抽象的概念更深入了一层。我们可将其想象为一个“纯”抽象类。它允许创建者规定一个类的基本形式:方法名、自...接口也包含了基本数据类型的数据成员,但它们都默认为static 和final。
  • Java接口里定义的成员变量

    千次阅读 2018-09-07 11:07:17
    原文:Java接口里定义的成员变量 在interface里面的变量都是public static final 的。所以你可以这样写: public static final int i=10; 或则 int i=10;(可以省略掉一部分) 注意在声明的时候要给变量赋予...
  • 编程语言的三大发展阶段:面向机器语言、面向过程语言...1、类是Java程序的基本要素,一个Java应用程序就是由若干个类所构成; 2、类声明的变量称为对象变量,也简称 对象 ; 3、class 关键字是用来定义类 ; 4、...
  • 备注:我搜了一下没找到合适方法直接查看对象的成员变量,自己发现了这样一个办法,一般我们用Spring时,可以写一个Holder类,实现ApplicationContextWare接口,这样我们在Spring加载后可以获取其context变量,...
  • java接口里面可以定义变量么?

    千次阅读 多人点赞 2020-03-01 18:39:27
    答案是:可以,但必须是public static final的,而且必须是public static final的。...//IA.java public interface IA { double NUM = 1;//等价于public static final double NUM = 1; String name = "IA"; v...
  • //接口中也可以定义成员变量(必须是public的),方法不能方法体 public int b = 88; public int getB(); } //实现类 class CC extends AA implements BB { public int getB(){ return 0; } } Java8支持...
  • java——Final修饰成员变量的注意事项

    万次阅读 多人点赞 2018-07-22 15:46:21
    一.Final 修饰成员变量的注意事项 final修饰成员变量,该成员变量必须在创建对象之前进行赋值... 成员变量的赋值三种实现方式: 定义成员变量的时候手动赋值 利用构造器对成员变量进行赋值 利用set函数进行赋...
  • 成员变量和局部变量 1.程序例子: public class HelloThreadTest { public static void main(String[] args) { HelloThread r = new HelloThread(); Thread t1 = new Thread(r); Thread t2 ...
  • Java类中的成员变量的赋值方法

    万次阅读 2015-12-20 20:15:23
    1.在类体中定义类成员变量时,直接对成员变量进行赋值 2.通过构造方法赋值 3.使用setter方法赋值。 这三种方法最后达成的效果是一样的,都是对对象进行的赋值。以下对其做一下简单的分析: 1.在类体中定义类成员...
  • 为什么接口中的成员变量非得是public static final的呢?   首先明白一个原理,就是接口的存在意义。接口就是为了实现多继承的抽象类,是一种高度抽象的模板、标准或者说协议。规定了什么东西该是这样,如果...
  • JAVA接口中的变量

    千次阅读 2012-04-05 10:06:15
    首先你要弄清接口的含义.接口就是提供一种统一的'协议',而接口中的属性也属于'协议'中的成员.它们是公共的,静态的,最终的常量....的人会说了,没有关系,可以通过实现接口的对象的行为来修改接口中的属

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 277,762
精华内容 111,104
关键字:

java接口有没有成员变量

java 订阅