精华内容
下载资源
问答
  • Java接口声明对象

    千次阅读 2015-10-11 16:40:28
    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。如 x=new comparable(......);//这个是错误来...

    Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。但是接口不是类,不能使用new 运算符实例化一个接口。如 x=new comparable(......);//这个是错误来的。但是可以声明接口变量Comparable x; //这是允许的。

    用JAVA接口声明一个变量是什么意思?

    不是接口变量,而是一个接口类型的引用指向了一个实现给接口的对象,这是java中的一种多态现象
    java中的接口不能被实例化,但是可以通过接口引用指向一个对象,这样通过接口来调用方法可以屏蔽掉具体的方法的实现,这是在JAVA编程中经常用到的接口回调,也就是经常说的面向接口的编程


    展开全文
  • java接口对象区别

    万次阅读 2017-11-21 08:35:57
    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为...
    1. “`

      1. 列表内容

      深入理解Java的接口和抽象类

        对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:

        一.抽象类

        二.接口

        三.抽象类和接口的区别

        若有不正之处,请多多谅解并欢迎批评指正,不甚感激。

        一.抽象类

        在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:
      abstract void fun();

        抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。

        下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。
      [public] abstract class ClassName {
      abstract void fun(); }

        从这里可以看出,抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

        包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

        1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

        2)抽象类不能用来创建对象;

        3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

        在其他方面,抽象类和普通的类并没有区别。 二.接口

        接口,英文称作interface,在软件工程中,接口泛指供别人调用的方法或者函数。从这里,我们可以体会到Java语言设计者的初衷,它是对行为的抽象。在Java中,定一个接口的形式如下:
      [public] interface InterfaceName { }

        接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static
      final变量(并且只能是public static
      final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public
      abstract方法(用其他关键字,比如private、protected、static、
      final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

        要让一个类遵循某组特地的接口需要使用implements关键字,具体格式如下: class ClassName
      implements Interface1,Interface2,[….]{ }

        可以看出,允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。
      三.抽象类和接口的区别

      1.语法层面上的区别

        1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;

        2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

        3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;

        4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。

      2.设计层面上的区别

        1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。那么在设计的时候,可以将飞机设计为一个类Airplane,将鸟设计为一个类Bird,但是不能将
      飞行 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly(
      ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。然后至于有不同种类的飞机,比如战斗机、民用飞机等直接继承Airplane即可,对于鸟也是类似的,不同种类的鸟直接继承Bird类即可。从这里可以看出,继承是一个
      “是不是”的关系,而 接口 实现则是
      “有没有”的关系。如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

        2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。什么是模板式设计?最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt
      B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt
      B和ppt
      C进行改动。而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

        下面看一个网上流传最广泛的例子:门和警报的例子:门都有open( )和close(
      )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念:
      abstract class Door {
      public abstract void open();
      public abstract void close(); }

        或者:
      interface Door {
      public abstract void open();
      public abstract void close(); }

        但是现在如果我们需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路:

        1)将这三个功能都放在抽象类里面,但是这样一来所有继承于这个抽象类的子类都具备了报警功能,但是有的门并不一定具备报警功能;

        2)将这三个功能都放在接口里面,需要用到报警功能的类就需要实现这个接口中的open( )和close(
      ),也许这个类根本就不具备open( )和close( )这两个功能,比如火灾报警器。

        从这里可以看出, Door的open()
      、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。

       interface Alram {
      void alarm(); }   abstract class Door {
      void open();
      void close(); }   class AlarmDoor extends Door implements Alarm {
      void oepn() {
        //....
      }
      void close() {
        //....
      }
      void alarm() {
        //....
      } } ```
      
    展开全文
  • 创建实现Java的接口类的对象

    千次阅读 2019-02-01 12:39:32
    public interface Jiekou { ...//实现接口的class public class Jiekouimple implements jiekou{  public void s(); } public class Test(  public static void main(String[] args) {  ...

    public interface Jiekou {
        public void s();
    }
    //实现接口的class
    public class Jiekouimple implements jiekou{
        public void s();
    }

    public class Test(
        public static void main(String[] args) {
            Jiekou  jiekou = new Jiekouimple ();
    }
    )

     

    接口是不能实例化的,即不能new一个接口出来,但是可以创建一个接口实现类的对象;

    必须要重写接口中的方法

    Jiekou jiekou = new Jiekou() {
        @Override
          public void s() {
            
        }
    };

     

    接口的使用规范:

    1.接口中可以定义常量,不能定义变量,如果你在接口中定义属性,那么通过反编译可以看见他会自动用public static final 修饰,接口中的属性都是全局静态常量,接口中的常量必须在定义时指定初始值。

    2.接口中所有的方法都是抽象方法,接口中方法都会自动用public abstract 修饰,即接口中只有全局抽象方法。

    如:

    public interface UserDao {
        String var = "常量1";
        Integer t = 23;
        User getById(Long id);
    }

    反编译后的:

    package com.slef.dao;

    import com.slef.model.User;

    public abstract interface UserDao
    {
      public static final String var = "常量1";
      public static final Integer t = Integer.valueOf(23);

      public abstract User getById(Long paramLong);
    }

     

    展开全文
  • java Api接口判断传入的对象以及对象字段是否为空

    常见的未封装的api接口我们会这么写,来判断这个传入参数是否为空,来输出什么什么参数为空

    if(Stringutils.isEmpty(vo.getName())) {

    return "name参数为空";

    }

    if(Stringutils.isEmpty(vo.getAge())) {

    return "age参数为空";

    }


    下面使用工具类封装的方式校验传入对象的指定参数是否为空,较为简便。

    缺点:

    并没有对list或者map中的某字段是否为空做判断,只做了大小和非空的判断

    public class ArrayIsNotNull {
    
    	public static boolean isNull(Object o) {
            boolean result = false;
            if (null == o) {
                result = true;
            } else if (o instanceof List) {
                result = ((List) o).size() == 0;
            } else if (o instanceof Map) {
                result = ((Map) o).isEmpty();
            } else if (o.getClass() == String.class) {
                result = isEmpty(o.toString());
            }
            return result;
        }
    	
    	public static  boolean isEmpty(String s) {
        	boolean result=false;
        	if("".equals(s)) {
        		result=true;
        	}
        	return result;
        }
    	
    	public static void isNullAndThrowExp(String[] msg, Object... o) throws Exception {
            if (null != o && msg.length>0) {
                for (int i = 0; i < o.length; i++) {
                    if (isNull(o[i])) {
                    	String name=i < msg.length ? msg[i] : "";
                    	System.out.println("第"+i+"个参数"+name+"为空!");
                        throw new Exception();
                    }
                }
            }else{
            	System.out.println("传入对象为null");
            	throw new Exception();
            }
        }
    	
    	public static void main(String[] args) throws Exception {
    		Student student=new Student();
    		student.setAge(11);
    		student.setNameString("name");
    		student.setPeople(true);
    		ArrayList<Object> list=new ArrayList<Object>();
    		//list.add("");
    		student.setList(list);
    		Map<Object, Object> map=new HashMap<Object, Object>();
    		map.put("", "");
    		student.setMap(map);
    		
    		isNullAndThrowExp(new String[]{"age","nameString","isPeople","list","map"},student,student.getAge(),student.getNameString(),student.isPeople(),student.getList(),student.getMap());
    		
    	}


    student对象,get set略

    public class Student {
    
    	private String nameString;
    	private int age;
    	private boolean isPeople;
    	private ArrayList<Object> list;
    	private Map<Object, Object> map;
    	



    展开全文
  • Java中如何遍历Map对象的4种方法

    万次阅读 多人点赞 2013-09-05 10:19:21
    Java中如何遍历Map对象 How to Iterate Over a Map in ...既然java所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等) 方法一 在for-each循环中使用ent
  • Effective-Java 通过接口引用对象

    千次阅读 2020-06-28 09:47:33
    如果存在合适的接口类型,那么应该使用接口类型声明参数、返回值、变量和字段。 惟一真正需要引用对象的类的时候是使用构造函数创建它的时候。为了具体说明这一点,考虑 LinkedHashSet 的情况,它是 Set 接口的一个...
  • 不用写成你那么麻烦 直接写成Person p = new Student();...1.Java的多态性 就是多种变现形式 接口跟实现类都能完成同样的功能 2.隐藏内部代码块 人家只知道用p能调用Student的功能但是不知道你 Student类是怎么实现的
  • Java的接口专家说:多个抽象类的抽象就是“接口”。 说人话:在Java中最小的程序单元就是类,接口其实是一个特殊的类。Java的接口表示规范,用于定义一组抽象方法,表示某一类事物必须具备的功能,要求实现类...
  • Cloneable可以实现对象的克隆复制,Serializable主要是对象序列化的接口定义。很多时候我们涉及到对象的复制,我们不可能都去使用setter去实现,这样编写代码的效率太低。JDK提供的Cloneable接口正是为了解决对象...
  • java中面向对象好处 Java接口作用

    千次阅读 2014-09-09 19:26:19
    使用面向对象思想进行开发有以下优点:1、易维护采用面向对象思想设计结构,可读性高,由于继承存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本。2、质量高在设计时,可重用...
  • 先上代码 ...现在在另一个类方法中 Read read=new Create().getRead(); 下面有两个问题: 1.如果 read instanceof Student 返回true 还是 false 2.Student stu=(Student)read; 能这么写么?为什么呢?
  • Java 中到底是应该用接口类型 还是实现类类类型去引用对象? //implA 为接口 ClassA为其实现类 implA a=new ClassA();//接口类型引用变量A 去接收对象地址 or ClassA a=new ClassA();//类类型引用变量...
  • java-面向对象编程-接口

    千次阅读 2017-02-24 16:54:26
    我们在上一章说到实现java多继承方法,并且介绍了关于内部类相关知识点。接下来我们介绍是另一种办法:接口。我们知道 ,继承目的是为了多态,而接口,则是实现多态另一种重要途径。灵活掌握接口的用法及...
  • 我们可以定义一个接口类型引用变量来引用实现接口的实例,当这个引用调用方法时,它会根据实际引用实例来判断具体调用哪个方法,这和上述超类对象引用访问子类对象的机制相似。//定义接口InterA ...
  • 相信小伙伴们都知道面向接口编程好处,这里我不再叙述。重点是怎么理解这种困扰新手方式。编程嘛,肯定是为了解决实际问题,如果不能很好和生活中事例相结合,单纯炫技把代码弄得很复杂,我是不推荐
  • 在日常写程序时,或做笔试题时总会遇到自己定义类或者数据结构,如果把自己定义类存入List这样数组中,排序是很麻烦,比如: 下面定义了一个Person类 class Person{ String name; int age; public Person...
  • 如何在一个普通的java类里面创建由Spring管理service接口对象? 如何在一个普通的java类里面创建由Spring管理service接口对象? 如何在一个普通的java类里面创建由Spring管理service接口对象
  • Java进阶(三十六)深入理解Java的接口和抽象类

    万次阅读 多人点赞 2016-07-23 15:14:07
    Java进阶(三十六)深入理解Java的接口和抽象类前言 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人...
  • 接口的实现类创建对象时,都要用多态吗?还是有什么其他情况?因情而异?
  • 1.首先我用是火狐插件restclient来测试各种接口,具体怎么安装,同学们可以自行百度。2.因为我接口参数是一个对象,requestbody注解。 @RequestMapping(value="/save",method=RequestMethod.POST) ...
  • Scala的特质和java的接口

    千次阅读 2018-07-10 22:09:15
    Scala的特质能够提供具体方法的实现,而java的接口只有方法的定义,这一点很像java的抽象类 Scala同Java,都不能进行多继承,但是前者可以实现多特质,用with关键字。这一点和java的接口相同 Scala的特质能在对象...
  • java接口和类区别Java 接口

    万次阅读 2016-11-07 20:47:55
    接口(interface)在java语言中就是一个抽象类型,但接口并不是一个抽象类,是抽象方法集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。 接口并不是类,编写接口的方式...
  • java的接口技术

    千次阅读 2014-02-24 15:35:35
    Java中Interface用法 Java中在接口的应用中,要...在引用接口时,接口的引用指向实现的对象,尽量定义为接口或父类引用。这其中有可能用到多态知识。引用接口用implements。 接口(interface)只能定义抽象方法而
  • 一个类要拷贝,首先要继承接口Cloneable package com.mao.hah; public class AnotherClass implements Cloneable{ private int x; public AnotherClass() { x=12; } public int getX() { return x; } ...
  • java中,对象和类、接口

    千次阅读 2017-08-12 19:30:58
    众所周知,java是面向对象的编程语言,而面相对象的三大特征则为:封装、继承和多态,那么java中是如何突显这三大特征呢? 一、对象和类 1. 继承: 父类相当于对于具有相同属性和方法一个或多个类进行了一个...
  • /*java 中数组排序 对象数组 排序基本类型数组可以直接排序但是 引用类型数组 不能直接排序 首先要实现 Comparable 接口并且重载compareTo方法 这个方法在 java.until包中 Arrays 类  binarySearch() ...
  • compareTo方法并没有在Object中声明。相反,它是Comparable接口中唯一一个方法。compareTo方法不但允许进行简单同等性比较,而且允许执行顺序比较,除此之外,它与Object...为实现Comparable接口的对象数组进行排序
  • Java Collection接口

    千次阅读 2016-08-13 10:03:12
    java.util包中提供了一些集合类,常用有List、Set和Map类,其中List类和Set类继承了Collection接口。这些集合类又称为容器,长度是可变,数组用来存放基本数据类型数据,集合用来存放类对象的引用。 List...
  • import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.net.URL....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,004
精华内容 32,801
关键字:

java的接口对象

java 订阅