在抽象类中,可以包含一个或多个抽象方法;但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”。
接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做。
接口中只能定义抽象方法,这些方法默认为 public abstract 的,因而在声明方法时可以省略这些修饰符。试图在接口中定义实例变量、非抽象的实例方法及静态方法,都是非法的。
package cn.abstractClass.day0927;
/**
* 现实领域 软件领域
* Serial ATA委员会 制订硬盘接口规范 interface SataHdd
* 硬盘串口为8针 int COUNT = 8;
* 数据读写功能 writeData(); readData();
*
* 三星 实现 硬盘接口 samsang implements SataHdd{}
*
*
* 接口 1.创建接口
*
* 接口是若干常量和抽象方法的集合
*
* 特性:
* 1.接口中只能定义抽象方法,这些方法默认为 public abstract
* 的,因而在声明方法时可以省略这些修饰符。试图在接口中定义实例变量、非抽象的实例方法及静态方法,都是非法的。
* 2.接口中没有构造方法,不能被实例化。
* 3.一个接口不实现另一个接口,但可以继承多个其他接口。接口的多继承特点弥补了类的单继承。
*/
public interface SataHdd {
/**
* 接口中声明的成员变量默认都是 public static final的,必须显示的初始化。因而在常量声明时可以省略这些修饰符
*/
//串口数量
static final int CONNECT = 8; //<==>int CONNECT=8;
//写数据功能
void writeData(); //<==>public abstract void writeData
//读数据功能
public void readData();
}
package cn.abstractClass.day0927;
public class SumsungHdd implements SataHdd {
@Override
public void writeData() {
System.out.println("Samsung硬盘写数据功能");
}
@Override
public void readData() {
System.out.println("Samsung硬盘读取数据功能");
}
}
package cn.abstractClass.day0927;
public class WesternDigitalHdd implements SataHdd {
@Override
public void writeData() {
System.out.println("\n");
System.out.println("WD写数据功能");
}
@Override
public void readData() {
System.out.println("WD读取数据功能");
}
}
package cn.abstractClass.day0927;
public class SataHddTest {
public static void main(String[] args) {
SumsungHdd samsung1=new SumsungHdd();
samsung1.writeData();
samsung1.readData();
WesternDigitalHdd wd = new WesternDigitalHdd();
wd.writeData();
wd.readData();
}
}
手机 智能机 功能机 Psp 运用抽象类和接口实现 其中还使用了匿名内部类
package cn.day0927;
public abstract class Phone {
String brand;
String color;
public void Phone(String brand,String color){
this.brand=brand;
this.color=color;
}
public abstract void callPhone();
public abstract void sendMessage();
}
package cn.day0927;
public class CellPhone extends Phone {
public void callPhone(){
System.out.println(this.brand+” “+this.color+”接打电话”);
}
public void sendMessage(){
System.out.println(this.brand+” “+this.color+”发送短信”);
}
}
package cn.day0927;
//SmartPhone即继承了Phone又实现了Psp
public class SmartPhone extends Phone implements Psp{
public void callPhone(){
System.out.println(this.brand+” “+this.color+”接打电话”);
}
public void sendMessage(){
System.out.println(this.brand+” “+this.color+”发送短信”);
}
//匿名内部类
// public void playGame(){
// new Psp() {
//
// @Override
// public void playGame() {
// System.out.println(brand+color+”也可以玩游戏”);
// }
// }.playGame();
// }
@Override
public void playGame() {
// TODO Auto-generated method stub
System.out.println(brand+color+”也可玩游戏”);
}
}
package cn.day0927;
public interface Psp {
public void playGame();
}
package cn.day0927;
public abstract class PhoneTest {
public static void main(String[] args) {
//Phone cellPhone = new CellPhone();//父类变量引用子类实例
CellPhone cellPhone = new CellPhone();//多态
cellPhone.brand="魅族";
cellPhone.color="粉色";
cellPhone.callPhone();
cellPhone.sendMessage();
SmartPhone smartPhone = new SmartPhone();//此处不能使用父类变量引用子类实例,如使用不能调用接口playGame();方法
smartPhone.brand="魅蓝note";
smartPhone.color="蓝色";
smartPhone.callPhone();
smartPhone.sendMessage();
smartPhone.playGame();
}
}