Java学习笔记——abstract class和interface的区别

          我的学习笔记,每天进步一点点!有需要的可以看看,不喜勿喷,欢迎指正~


  在面向对象中,对象是用类来描述的,但是并不是所有的类都是描述对象的。有的类是在一些类中抽象出来的概念,并不是具体的,也不能实例化出来。abstract class和interface是Java中对抽象概念进行定义的两种机制他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。我们在使用的时候应该如何选取呢?通过一些对比了解下吧!

        定义

     抽象类:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。在java中,通常在编程语句中用 abstract 修饰的类是抽象类,含有抽象方法的类称为抽象类,不能生成对象。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

            特点: 1.不能被实例化;     

      2.抽象类中可以不包括抽象方法(没什么意义了);    

      3.可以有普通成员变量、普通方法(包括构造方法);

      4.只要类中含有一个抽象方法(方法被abstract修饰),无论其他的方法是否是抽象的,该类都是抽象类;

      5.不能有抽象构造方法和抽象静态方法(抽象类中所有的抽象方法都是由子类实现,这两个方法子类不能继承,所以子类不能实现);

   一个测试小例子:

     接口:接口和抽象类类似,只是接口中的所有方法都是抽象的,并不是从那些类抽象而来,而是自己设计出来,其他类实现继承他实现自己的功能。
   特点:1.方法全部是抽象的,默认是public abstract类型(写不写都行);
      2.接口中的所有成员变量默认为public static final类型(一般没什么用);

   一个测试小例子:
     
     

上面的介绍大概明白了抽象类和接口的一些区别了,下面从它们的设计理念来介绍。


设计理念

   1.抽象层次不同:抽象类是对类的抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

           2.跨领域不同:抽象类是“is-a”的设计,从子类中发现公共的,泛化成的一个类,子类完全包含父类的所有属性及行为,例如cat、dog都是动物,都有动物的一些属性,所以可以抽象为一个Animal类;接口洗“like-a”的设计,只要有共同的行为(只要能实现接口中的抽象方法的),不管它到底是什么,都可以,例如一个接口中是fly()方法,只要能实现它方法的都可以,飞机、鸟都可以。  

  3.设计层次不同:对于抽象类而言,它是自下而上来设计的,我们要先知道子类,然后从子类中提取他们相同的属性方法才能抽象出父类;而接口则不同,它是自上而下设计出来的,根本就不需要知道子类的存在,只需要定义一个方法即可。


小结

1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface;

2.抽象类中可以不包括抽象方法可以有普通成员变量、普通方法,接口方法全部是抽象的,默认是public abstract类型接口中的所有成员变量默认为public static final类型


遇到这样的问题,想想它们的区别,勤于总结,理解更透彻!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件上传是Web开发中常见的功能之一,Java中也提供了多种方式来实现文件上传。其中,一种常用的方式是通过Apache的commons-fileupload组件来实现文件上传。 以下是实现文件上传的步骤: 1.在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> ``` 2.在前端页面中添加文件上传表单: ```html <form method="post" enctype="multipart/form-data" action="upload"> <input type="file" name="file"> <input type="submit" value="Upload"> </form> ``` 3.在后台Java代码中处理上传文件: ```java // 创建一个DiskFileItemFactory对象,用于解析上传的文件 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置缓冲区大小,如果上传的文件大于缓冲区大小,则先将文件保存到临时文件中,再进行处理 factory.setSizeThreshold(1024 * 1024); // 创建一个ServletFileUpload对象,用于解析上传的文件 ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件的大小限制,这里设置为10MB upload.setFileSizeMax(10 * 1024 * 1024); // 解析上传的文件,得到一个FileItem的List集合 List<FileItem> items = upload.parseRequest(request); // 遍历FileItem的List集合,处理上传的文件 for (FileItem item : items) { // 判断当前FileItem是否为上传的文件 if (!item.isFormField()) { // 获取上传文件的文件名 String fileName = item.getName(); // 创建一个File对象,用于保存上传的文件 File file = new File("D:/uploads/" + fileName); // 将上传的文件保存到指定的目录中 item.write(file); } } ``` 以上代码中,首先创建了一个DiskFileItemFactory对象,用于解析上传的文件。然后设置了缓冲区大小和上传文件的大小限制。接着创建一个ServletFileUpload对象,用于解析上传的文件。最后遍历FileItem的List集合,判断当前FileItem是否为上传的文件,如果是,则获取文件名,创建一个File对象,将上传的文件保存到指定的目录中。 4.文件上传完成后,可以给用户一个提示信息,例如: ```java response.getWriter().write("File uploaded successfully!"); ``` 以上就是使用Apache的commons-fileupload组件实现文件上传的步骤。需要注意的是,文件上传可能会带来安全隐患,因此在处理上传的文件时,需要进行严格的校验和过滤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值