精华内容
下载资源
问答
  • Java接口修饰符详解-可以修饰接口的修饰符

    万次阅读 热门讨论 2017-05-05 15:12:27
    可以修饰接口的修饰符有(C D) A private B protected C final D abstract 接口就是提供一种统一的”协议”,而接口中的属性也属于“协议”中的成员。它们是公共的,静态的,最终的常量。相当于全局常量。...

    Java接口修饰符详解



    可以修饰接口的修饰符有(C D

    A private   B protected   C  final    D abstract

    接口就是提供一种统一的”协议”,而接口中的属性也属于“协议”中的成员。它们是公共的,静态的,最终的常量。相当于全局常量。抽象类是不“完全”的类,相当于是接口和具体类的一个中间层。即满足接口的抽象,也满足具体的实现。

     

    接口是构建松耦合软件系统的重要法宝。

     

    A、接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们;

     

    B、接口仅仅描述系统能做什么,但不指明如何去做,所以接口中的方法

    都是抽象(abstract)方法;

     

    C、接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量。

     

    D、接口的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。

     

    E、接口中为什么不可以定义变量?如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。有的人会说了,没有关系,可以通过实现接口的对象的行为来修改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口 A 中有一个public 访问权限的静态变量 a。按照 Java 的语义,我们可以不通过实现接口的对象来访问变量 a,通过 A.a = xxx; 就可以改变接口中的变量 a 的值了。正如抽象类中是可以这样做的,那么实现接口 A 的所有对象也都会自动拥有这一改变后的 a 的值了,也就是说一个地方改变了 a,所有这些对象中 a 的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中不能出现变量,如果有变量,就和接口提供的统一的抽象这种思想是抵触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。

     

    通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接口是对开闭原则的一种体现。

     

    所以:

    接口的方法默认是public abstract

    接口中不可以定义变量即定义的变量前都要加上final修饰,使之成为常量(没有final修饰的是变量,加上final修饰就会变成常量)。所以接口的属性默认是public static final 常量,且必须赋初值。

    展开全文
  • java protected修饰

    2019-12-13 08:24:42
    1、定义 protected 的名称是「继承访问权限」,这也就是我们记忆中的 protectedprotected ...protected访问修饰符不能修饰类和接口,方法和成员变量能够声明为protected,但是接口的成员变量和成员方法不能声明为p...

    1、定义
    protected 的名称是「继承访问权限」,这也就是我们记忆中的 protected:protected 必须要有继承关系才能够访问。
    2、作用范围
    被声明为protected的变量、方法和构造方法能被同一个包中的任何其他类访问,也能够被不同包中的子类访问。protected访问修饰符不能修饰类和接口,方法和成员变量能够声明为protected,但是接口的成员变量和成员方法不能声明为protected。子类能访问protected修饰符声明的方法和变量,这样就能保护不相关的类使用这些方法和变量。

    展开全文
  • protected修饰符详解-源于Cloneable接口

    千次阅读 2018-01-10 10:10:03
    Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,clone()方法是Object类里面的方法,默认实现是一个Native方法。今天在做对象拷贝的时候发现一个问题,某类实现Cloneable接口后,...

      Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,clone()方法是Object类里面的方法,默认实现是一个Native方法。今天在做对象拷贝的时候发现一个问题,某类实现Cloneable接口后,还要重新实现Object类中的clone()方法:


    感觉有点奇怪,这个类里也没做什么特殊的操作啊,就是调用一下父类的clone方法:


    这太麻烦了,我们都知道protected的权限范围:

    ,也就是说子类是可以访问protected修饰的方法的。 

     接下来按照我们的思路写代码实现:

    1.去掉User类中的clone方法:

    接下来直接调用Object类中的clone方法:


    这时发现,报错啦!!! 子类实例竟然不能调用父类的clone方法!!!我们会有疑问:Object类是所有类的父类,那么为什么子类不能访问父类protected修饰的方法呢?

     其实是因为:与基类不在同一个包中的子类,只能访问自身从基类继承而来的受保护成员,而不能访问基类实例本身的受保护成员”。这句话是什么意思?不要急,接下来我们用代码详细解释。

     所以这里是因为,User类和Object类不同包,导致protected方法访问不了,接下来我们验证一下:



    没有错误,可以直接调用父类protected方法getA:

    此时Student类和Person类在同一个包下,假如不在同一个包中呢:



    此时报错了:


    我们发现此时子类不能调用父类的protected方法了。

     为什么应用了Cloneable接口的类通常还必须重写一个public的clone()方法?这里有两个原因:
      (1) 如果不重写,由于Object.clone()是proteced属性,所以这个clone()方法将无法在外部被调用,更精确地说,无法在目标类之外的任何地方调用。这样就使得克隆失去了用武之地。

      (2) Object.clone()毕竟只是提供了浅层拷贝,对于基本类型的字段,可以说它成功克隆了。但对于对象型字段,它并没有实现克隆的功能,仅仅做了一个赋值。试运行一下下面的代码就会更清楚了:

    public class Student implements Cloneable 
    {
        private int id;
        private String name;
        public StringBuffer sb = new StringBuffer("");
    
        public Student() {
            this.id = 744;
            this.name = "FL";
        }
    
        public Student(int id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public boolean equals(Object obj) {
            return this.id == ((Student) obj).id;
        }
    
        public String toString() {
            return "Student id : " + id + " Name " + name;
        }    
    
        public static void main(String[] args) throws CloneNotSupportedException 
        {
            Student s1 = new Student(101, "WangQiang");
            Student s2 = (Student) s1.clone();
            System.out.println(s1 == s2);
            System.out.println(s1);
            System.out.println(s2);
    
            s1.sb.append("s1's string");
            System.out.println("s2.sb's value = " + s2.sb.toString());
            System.out.println(s1.sb==s2.sb);
            
        }
    }

     总结:对于protected的成员或方法,要分子类和基类是否在同一个包中。与基类不在同一个包中的子类,只能访问自身从基类继承而来的受保护成员和方法,而不能访问基类实例本身的受保护成员和方法。在相同包时,protected和public是一样的


    展开全文
  • java接口前面加abstract修饰符今天在看源码的时候看到别人写的接口前面和方法前面都加上了abstract修饰符,感到有点困惑,因为在之前的学习和工作中认为接口默认就是抽象类型的(public abstract),不需要我们手动...

    java接口前面加abstract修饰符

    今天在看源码的时候看到别人写的接口前面和方法前面都加上了abstract修饰符,感到有点困惑,因为在之前的学习和工作中认为接口默认就是抽象类型的(public abstract),不需要我们手动添加abstract修饰符,所以我就在网上查询了一些资料了解到,java接口的默认规范中定义接口是public abstract修饰的,不加的话编译器也会自动的加上,但是为了规范还是老老实实的加上。

    public abstract interface JSONAware
    {
      public abstract String toJSONString();
    }

    java四中修饰符的访问权限


                         当前类                当前包                  子类              其他包

    public           可以                    可以                      可以               可以

    protected     可以                     可以                      可以               不可以

    default          可以                      可以                     不可以            不可以

    private          可以                      不可以                 不可以              不可以

    展开全文
  • 不能修饰接口的关键字

    千次阅读 2019-05-06 17:32:00
    接口不能用private、protected修饰可以用final和abstract 接口里的方法不能用private、protected修饰 转载于:https://www.cnblogs.com/cn-chy-com/p/10820945.html
  • 通常使用java 的接口时都是不带修饰符的 public interface Test { int a = 0; void test(); } 其实这个里面有好多修饰符都是默认省略掉了。 正确的类型应该是: public interface Test { public static ...
  • 修饰符的作用域 其中需要注意几点,接口中不允许有private和protected修饰
  • 对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制...
  • Java接口修饰可以为()

    万次阅读 多人点赞 2017-12-13 23:51:26
    Java接口修饰可以为() A private B protected C final D abstract解析: 答案:D 解析:接口很重要,为了说明情况,这里稍微啰嗦点:(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都...
  • 首先,不清楚Java外部类和内部类的同学可以先百度一下。...public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有类都是可以访问的。 protected(受保护的)继承访问权限:使用protec...
  • 内部接口可以被什么修饰修饰

    千次阅读 2017-05-08 21:47:10
    我觉得可以这样理解static的意义,当它描述外部的“东西”(类,接口)时它表示是否可以被实例化(因为接口不可被实例化,所以外部接口不可被修饰为static);而当他描述内部的东西时(字段,方法,类,接口)他就...
  • 被声明为protected的变量、方法和构造器能被同一个包中的任何其他类访问,也能够被不同包中的子类访问。 Protected访问修饰符不能修饰类和接口,方法和成员变量...子类能访问Protected修饰符声明的方法和变量,这样...
  • Java权限修饰符-public,private,protected

    千次阅读 多人点赞 2019-08-28 18:38:04
    最近在温习java基础,看到了修饰... 在java中有四种权限修饰符,这四种分别是public,private,protected和默认修饰符,其中,默认修饰符又称为friendly,是指在定义类或变量的时候不加任何修饰符。接下来,由我来为大...
  • 接口修饰符号

    千次阅读 2018-05-11 00:17:56
    14. Java接口修饰可以为()A private B protected C final D abstract答案:CD解析:接口很重要,为了说明情况,这里稍微啰嗦点:(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是...
  • 接口的声明,修饰符的使用和类的声明是一致的,(当前,前提类是外部类,不是所谓的内部类),都只能使用public或者什么都不写,默认权限(这里的默认权限不是default,可以理解为friendly,但...
  • 定义 private(私有的)无法访问:使用private关键字,就意味着被...protected(受保护的)继承访问权限:使用protected关键字,就意味着被声明的成员或方法,在子类以及相同包内的其他类都可以访问的。 default(...
  • interface接口修饰符关键字

    千次阅读 2020-10-13 12:10:43
    不可以使用private或者protected修饰。 备注: 1.在JDK1.8中,接口可以定义静态方法,可以直接用接口名调用。 public interface Main{ static int ss() { return 0; } } 2.在JDK1.8中,接口可以使用default...
  • Java 通过修饰符来控制类、属性和方法的访问权限和其他功能,通常放在语句的最前端。例如:public class className { // body of class } private boolean myFlag; static final double weeks = 9.5; protected ...
  • Java中的访问修饰符有四种,分别是public,protected,默认,private。主要作用是控制类之间的数据的访问权限。这些修饰可以修饰的Java元素有下面这些: 类 接口 类中的方法 接口中的方法 类中的字段 接口中的...
  • 对于java程序员来说,java的访问权限修饰词public、protected、default、private的区别和使用肯定...为什么类和接口(不考虑内部类和接口)不能使用private和protected修饰词,只能是public和default?为什么接口的方法
  • 在 Kotlin 中一切都是默认 public 的。...这些修饰可以用在类,对象,接口,构造函数,属性以及属性的set()中。 包级别的使用修饰词: package com.xingen.kotlin.day2017529.pm private fun test1(){} public v...
  • 修饰符范围 ptivate default protected public 同一个类中 √ √ √ √ 同一个包中 √ √ √ 子类中 √ √ 全局范围中 √
  • 访问修饰符包括public,protected,default,private。 public:: 对所有类可见。使用对象:类、接口、变量(成员变量)、方法。 protected:对同一包内的类和子类可见。使用对象:变量(成员变量),方法。(不能够...
  •  使用protected修饰,只能在当前类,或者同一包下创建对象。 使用private修饰,只能在当前类中创建对象。2,使用不同修饰符修饰构造函数有啥作用? public修饰,不限定对象啥时候在什么地方创建。 ...
  • JAVA 访问修饰符 及 protected 几点被人忽略的致命要害,不看后悔哦,亲
  • 面向对象简单题:private、默认、protected、public四个权限修饰...(3)修饰接口:public、默认(default)。 (4)修饰方法:private、默认、protected、public四个都可以。 (5)修饰变量:private、默认、prot...
  • 对于java程序员来说,java的访问权限修饰词public、protected、default、private的区别和使用...为什么类和接口(不考虑内部类和接口)不能使用private和protected修饰词,只能是public和default? 为什么接口的...
  • private,protected可否用于修饰类?

    千次阅读 2016-04-14 21:36:00
    4、私有保护访问控制符private、protected:用修饰符private、protected修饰的成员变量可以被该类本身或该类的子类两种类访问和引用。 5、静态域修饰符static:用static修饰的成员变量仅属于类的变量,而不属于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,640
精华内容 40,256
关键字:

protected可以修饰接口吗