java面向对象(二)抽象类、接口和包

一、抽象类

1.抽象方法

没有方法体的方法就是抽象方法

  1. public abstract void setContent();
  • 以abstract修饰的方法
  • 只有方法名称和参数等,没有方法体(即没有实现部分)
2.什么是抽象类
  • 拥有抽象方法的类就是抽象类(只要有抽象方法的类就必须是抽象类,它可以有其他属性和非抽象方法)
  • 抽象类必须在class关键词前面添加上abstract关键词,以表示此类为抽象类
  • 继承自抽象类的子类必须要实现其父类的抽象方法
  • 抽象类是无法实例化的(可以通过匿名对象的方式来实例化,即在实例化方法中实现其抽象方法)
  1. //定义抽象类Information
  2. abstract class Information {
  3. protected String content;
  4. private String mediaType;
  5. public abstract void setContent(String content);
  6. public String getContent() {
  7. return this.content;
  8. }
  9. public void setMediaType(String type) {
  10. this.mediaType = type;
  11. }
  12. }
  13. //Article继承自抽象类Information
  14. class Article extends Information {
  15. //实现抽象方法setContent
  16. public void setContent(String content) {
  17. this.content = content;
  18. }
  19. }
  20. public class AbstractDemo {
  21. public static void main(String[] args) {
  22. Article a = new Article();
  23. a.setContent("测试内容");
  24. System.out.println(a.getContent());
  25. }
  26. }

二、接口

1.什么是接口

以interface来定义的代码块就是接口,通俗的讲,所有方法都为抽象方法的类就是接口

  1. interface Sortable {
  2. public abstract void sort(Object obj);
  3. }
  • 没有任何抽象方法的接口,是空接口,也是合法的
2.接口的作用
  • 定义一种规范或规则,以供程序扩展

三、包

1.包的作用

将不同功能的java文件进行分割,类似于目录(一般也是与目录对应的),为了方便程序文件的管理

2.包的操作
(1)包的定义
  • 包定义都在程序文件的首行
  • 以package开头
  • 一般包的命名空间以公司的域名反转形式来的
  1. package com.shixinke.java.demo;
  2. public class Demo {
  3. }
  • 如我的域名为shixinke.com,因此我的项目的包命名一般以com.shixinke这样的开头
(2)包的导入

包导入使用import关键词来导入包

  • import 包.类:导入某个包的某个类
  • import 包.*: 导入在当前包中使用到的某个包的具体某个类(不是包所有的类全部导入)

静态导入:

格式:import static 包名….类名.方法名;

可以直接导入到方法的级别

  1. import static java.lang.Math.abs;
  2. public class Demo {
  3. public static void main(String[] args) {
  4. System.out.println(abs(-18.7));
  5. }
  6. }
  • 不使用静态导入的情况下,需要通过Math.abs来调用
  • 使用静态导入后,直接使用方法名abs来调用
3.包的权限
权限 在同一包的同一类 同一包的不同类 不同包的子类 不同包的非子类
public
protected
默认(default)
private
4.系统常见包

系统常用包