一、抽象类
抽象类的定义:
当一个类被abstract关键词修饰时,该方法称为抽象类。
public abstrac class 类名{
代码块;
}
抽象方法的定义:
当一个类的方法被abstract关键词修饰时,该方法称为抽象方法,抽象方法所在的类必须定义为抽象类。抽象方法与普通方法相比没有方法体。
public abstrac class 类名{
[访问修饰符] abstract 返回值类型 方法名();
}
二、接口
概念性的接口,指系统对外提供的所有服务。
通俗的来说接口是一个不能实例化的类型,是一种约定所以接口中没有构造方法,定义接口使用interface关键字修饰。
定义接口类型与定义类相似,接口中的成员变量默认都是public static final类型,默认方法都是public abstract类型的抽象方法。
实现接口使用implements关键字,实现类中必须实现接口中所定义的所有抽象方法。
public interface 接口名{
String 常量=初始值 //静态常量
public void 方法名(); //抽象方法
}
public 类名 implement 接口名{
public void 方法名(){
代码块;
}
}
接口特性:
1.接口不能被实例化
2.实现类必须实现接口的所有方法,除非这个类是抽象类
3.实现类可以实现多个接口
implements 多个接口使用逗号隔开
4.接口中的变量都是静态常量
5.接口可以多实现(一个类可以实现多个接口),用逗号分隔
6.接口中的所有方法默认都是公共抽象方法
例:
采用面向接口编程思想组装一台计算机
public interface CPU {
// String brand="Intel";
// String HZ="3.8GHz";
String getbrand();
String getHZ();
}
public interface EMS {
// String rongLiang="3000GB";
String getrongLiangE();
}
public interface HardDisk {
// String rongLiang="4G";
String getrongLiangH();
}
public class computer implements CPU,EMS,HardDisk {
@Override
public String getbrand() {return "三星";}
@Override
public String getHZ() {
return "3.8GHz";
}
@Override
public String getrongLiangE() {
return "3000GB";
}
@Override
public String getrongLiangH() {
return "4GB";
}
public void Show(computer c){
System.out.println("计算机的信息如下:");
System.out.println("CPU的品牌是:"+c.getbrand()
+",主频是:"+c.getHZ()+"\n硬盘容量是:"
+c.getrongLiangE()+"\n内存容量是:"
+c.getrongLiangH());
}
// public void show(){
// System.out.println("计算机的信息如下:");
// System.out.println("CPU的品牌是:"+CPU.brand+"主频是:"+CPU.HZ);
// System.out.println("硬盘容量是:"+EMS.rongLiang);
// System.out.println("内存容量是:"+HardDisk.rongLiang);
public static void main(String[] args) {
computer c = new computer();
c.Show(c);
}
}
抽象类VS接口
- 相同点:
代表系统的抽象层
都不能被实例化
都能包含抽象方法 用于描述系统提供的服务,不必体提供具体实现 - 不同点:
在抽象类中可以实现普通方法,而接口不能 抽象类便于复用,接口便于代码维护
一个类只能继承一个直接的父类,但可以实现多个接口 - 使用原则:
接口做系统与外界交互的窗口 接口提供服务
接口本身一旦制定,就不允许随意修改
抽象类可以完成部分功能实现,还有部分功能可作为系统的扩展点(多态的部分)
三、总结
Java中的接口
属性全都是全局静态常量
方法都是全局抽象方法
无构造方法
一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法
抽象类利于代码复用,接口利于代码维护