在学校做的基本都是j2se向的东西,毕业后并没有继续java
最近开始学习java,遇到了几个问题,求几位达人解达:1、何时用接口?何时用抽象类。
在我看来的话,抽象类由于可以规定成员变量及非final类,所以一般用于系统内部调用时使用
而接口是用于方法的集合,或者说是对
例如动物园的例子,动物就用抽象类去实现,而喂动物就用接口实现
当然这个问题我也没搞清楚,所以问问达人们2、有接触过一个spring+hibernate的项目,里边spring是用来管理那些实例属性进行反转注入的,而hibernate的作用是对数据库进行面向对象编程。
这样看来spring应该是松耦合的作用,而hibernate是用来干什么的?增加内聚?
另外一个问题就是spring管理的实例,是否有规定?毕竟service这些函数是没必要被管理的3、java线程池是用于对一系列线程的控制和操作,在j2ee里,除了servlet,哪里还需要用到线程池?4、ServerSocket的话,是一个可以接受多个client socket连接的线程池还是只对单一socket起作用(类似singleton模式)?暂时想到这四个问题,肯请指点

解决方案 »

  1.   

    1、何时用接口?何时用抽象类。
    接口一定多用于定义和外界交互的方法,而抽象类一般自己有写处理的方法,只不过把一些细节交给子类处理。
    同时注意接口可以都继承,抽象类不行。2、spring一个比较好的系统框架,hibernate是一个持久层框架
    是spring管理的实例,是否有规定?这里不是很明确你的疑问,把spring看做是一个bean的池,你需要用用什么,进去找,找到了使用就可以了3. servlet除了有多线程的,还有一个我们不常用的单线程模式的servlet。 需要用到线程的地方就用到线程哟,线程的使用,是应用上的。不是技术上的。4。这个和单例不是一个范畴的东西,单例是一个实例而已。这里一般使用serversocket都是一个实例对应一个监听的端口,但是和singlton模式是两码事,singleton模式是不希望用户实例过多的实例,而这里是只能有一个实例。以上回答也不知道是不是点到你需要的地方了。
      

  2.   

    1. 理论上的区别网上太多了,你自己搜搜,我觉得区别在于abstract class表示的是"is a"关系,interface表示的是"like a"关系,这样解释或许更生动一些,is和like的区别你明白吧2. hibernate是持久层框架,它用来进行数据持久化,最重要的是你对数据的存取是通过完全的面向对象的方式了,数据都被封装在对象里了,这才真正符合面向对象的思想3. 这个问题问得 只要是考虑到有大量的并发访问想提高效率,都可以考虑用线程池,servlet这个概念有点模糊,总之你在处理用户提交的请求的地方使用线程池4. 这个应该说是一个ServerSocket对应一个请求
      

  3.   


    首先感谢这位高手的解答1、“同时注意接口可以都继承,抽象类不行。”抽象类似乎也能继承super里的所有方法吧?或者是我理解了?2、如果说对象持久层的话我就明白了,不过spring作为bean池,我看到不仅仅是bean,还有类似于bean的包含setxxx,getxxx方法的都在其中控制,是不是可以说spring可以用来管理所有除了service(方法)的所有java类?3,4的问题主要是早晨在想socket多线程的问题时,突然大脑绞在一起了,完全想不通3里主要是没有实际的servlet例子,基本都是在理论上徘徊,因为做过别的web开发,所以将servlet看成一个函数,页面跳转附带的?a=xxx&&b=xxx这些参数看成函数的参数,每个用户都会产生一条新线程进行交互操作。不知道这样理解对不对?还有就是在j2ee里的多线程只有servlet使用吗?4里感觉serversocket应该是在socket连接后一直在起监听的作用,接受和发送每个stream,但是想起client的socket连接是单一的,所以以为serversocket的连接也是单一的,有些误解,现在明白了
      

  4.   


    1、抽象类用于具体对象抽象,接口用于某个概念抽象……懂了2、恩,你们这样一说理解了,hibernate是对象持久化与面向对向的数据库操作3、这个问题还残留点疑问……在楼上已问……4、serversocket与socket是一对一?
      

  5.   

    1. 理论上的区别网上太多了,你自己搜搜,我觉得区别在于abstract class表示的是"is a"关系,interface表示的是"like a"关系,这样解释或许更生动一些,is和like的区别你明白吧顶
      

  6.   

    1.如果有共同的实现,抽象类可以简单的实现,接口只能有方法的定义
    抽象类不能实例化,还有接口中如果有变量的话,只能是静态的
    2.hibernate和spring都是轻量级的框架,松耦合。对于Spring中的HibernatDaoSupport,它封装
    了Hibernate的session。这有点耦合的成分,但是也不是严格意义上的
    3.线程的使用是需求和应用上的
    4.一般serversocket一个实例对应一个监听的端口
      

  7.   

    个人理解 
       1、何时用接口?何时用抽象类。 
         当继承的都是一些方法 就用接口, 如果不止是方法还有属性,用抽象类 
       2,spring一个比较好的系统框架,hibernate是一个持久层框架 
       3,在webservice也要可用线程池的,
      
      

  8.   

    1.抽象类顾名思义主要用于抽象层次具有共性的类定义,不能被实例化。比如有如下几个类:猫,狗,猪。如果抽象成宠物的概念,那么他们的共性是name,color,weight...;run(),sleep()....等等。定义猫这个类时就继承之,再补充个性的属性和方法。接口定义的是基本上是类方法的规范。比如定义数据库访问中查询的方法规范:public Person findById(int id);方法定义了传入的参数类型和返回的参数类型。然后根据底层的不同分别进行实现。JavaEE里基本多是SUN定义的接口,各大厂商针对接口的不同实现。
    2.2个多是轻量级的框架,多是为了解耦。轻量级的框架倾入性少,基本上类的定义多是POJO,无需继承他们定义的父类,实现解耦。spring的主要应用于业务模块的注入。当业务发生改变时,只要修改下业务功能,再修改下XML配置。spring注入使用的多是接口。hibernate则不仅屏蔽了底层数据库的差异,而且把二维的数据转化成了对象,程序员只要面向对象进行编程。说白了通过配置关系映射,程序员面向的是对象型的数据库,虽然数据库仍然是关系型数据库。
    3.线程池只是池技术的一种应用。还有数据库连接池,对象锁池等等。有些对象new的开销是很大的,所以初始化的时候就new好几个放在一个容器里。这个容器就叫池。要用的时候拿一个,用完放回去。JavaEE主要就是WEB和EJB,web的本质就是Servlet,还有哪用池?
    4.ServerSocket是接受多个请求的。SS在指定的端口进行监听,监听到建立连接,返回一个Socket通道。再进行监听。程序员可以在这个通道上启动个线程与客户端进行交互。以上有误的话 请大家指正。