一、抽象类
1.抽象方法
没有方法体的方法就是抽象方法
public abstract void setContent();
- 以abstract修饰的方法
- 只有方法名称和参数等,没有方法体(即没有实现部分)
2.什么是抽象类
- 拥有抽象方法的类就是抽象类(只要有抽象方法的类就必须是抽象类,它可以有其他属性和非抽象方法)
- 抽象类必须在class关键词前面添加上abstract关键词,以表示此类为抽象类
- 继承自抽象类的子类必须要实现其父类的抽象方法
- 抽象类是无法实例化的(可以通过匿名对象的方式来实例化,即在实例化方法中实现其抽象方法)
//定义抽象类Information
abstract class Information {
protected String content;
private String mediaType;
public abstract void setContent(String content);
public String getContent() {
return this.content;
}
public void setMediaType(String type) {
this.mediaType = type;
}
}
//Article继承自抽象类Information
class Article extends Information {
//实现抽象方法setContent
public void setContent(String content) {
this.content = content;
}
}
public class AbstractDemo {
public static void main(String[] args) {
Article a = new Article();
a.setContent("测试内容");
System.out.println(a.getContent());
}
}
二、接口
1.什么是接口
以interface来定义的代码块就是接口,通俗的讲,所有方法都为抽象方法的类就是接口
interface Sortable {
public abstract void sort(Object obj);
}
- 没有任何抽象方法的接口,是空接口,也是合法的
2.接口的作用
- 定义一种规范或规则,以供程序扩展
三、包
1.包的作用
将不同功能的java文件进行分割,类似于目录(一般也是与目录对应的),为了方便程序文件的管理
2.包的操作
(1)包的定义
- 包定义都在程序文件的首行
- 以package开头
- 一般包的命名空间以公司的域名反转形式来的
package com.shixinke.java.demo;
public class Demo {
}
- 如我的域名为shixinke.com,因此我的项目的包命名一般以
com.shixinke
这样的开头
(2)包的导入
包导入使用import
关键词来导入包
- import 包.类:导入某个包的某个类
- import 包.*: 导入在当前包中使用到的某个包的具体某个类(不是包所有的类全部导入)
静态导入:
格式:import static 包名….类名.方法名;
可以直接导入到方法的级别
import static java.lang.Math.abs;
public class Demo {
public static void main(String[] args) {
System.out.println(abs(-18.7));
}
}
- 不使用静态导入的情况下,需要通过Math.abs来调用
- 使用静态导入后,直接使用方法名abs来调用
3.包的权限
权限 | 在同一包的同一类 | 同一包的不同类 | 不同包的子类 | 不同包的非子类 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
默认(default) | √ | √ | ||
private | √ |
4.系统常见包