抽象类使用 abstract 关键字修饰,该类即为抽象类。
抽象类的作用:
1、某些情况下,父类约束子类必须包含哪些方法,但不知道子类如何去实现这些方法。
2、可以从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,避免子类设计的随意性。
抽象类的使用规则:
1、使用 abstract 定义抽象对象;
2、abstract 定义抽象方法,只有声明,不需要实现;
3、包含抽象方法的类是抽象类;
4、抽象类中可以包含普通的方法,也可以没有抽象方法;
5、抽象类不能直接创建,可以定义引用变量,指向子类对象;
首先先创建一个抽象类:
1 2 3 4 | public abstract class Telephone { //打电话
public abstract void call(); //发短信
public abstract void sendMessage();
}
|
接着分别创建两个子类继承该父类,子类必须包含父类所声明的抽象方法,否则会报错:
1 2 3 4 5 6 7 8 9 10 11 | public class CellPhone extends Telephone{
public void call(){
System.out.println("通过键盘来打电话");
}
public void sendMessage()
{
System.out.println("通过键盘来发短信");
}
}
|
1 2 3 4 5 6 7 | public class SmartPhone extends Telephone{ public void call(){
System.out.println("通过语音来打电话");
} public void sendMessage()
{
System.out.println("通过语音来发短信");
}
}
|
再创建一个测试类:
1 2 3 4 5 6 7 8 9 | public class Test { public static void main(String[] args) { //普通手机
Telephone cellphone = new CellPhone();
cellphone.call(); //通过键盘来打电话
cellphone.sendMessage(); //通过键盘来发短信 //智能手机
Telephone smartphone = new SmartPhone();
smartphone.call(); //通过语音来打电话
smartphone.sendMessage(); //通过语音来发短信
}
}
|
Java中的接口被用来继承,必为abstract,一般为public,且内部为常量和抽象方法,一个类可以实现多个接口。
首先创建一个新的接口:
1 2 3 | public interface IPlayGame {
public String todo = "可以玩游戏";
public void playGame();
|
将SmartPhone类改写为:
1 2 3 4 5 6 7 8 9 10 11 | public class SmartPhone extends Telephone implements IPlayGame{ protected String name = "智能手机"; public void call(){
System.out.println("通过语音来打电话");
} public void sendMessage()
{
System.out.println("通过语音来发短信");
}
@Override public void playGame() {
System.out.println(name + todo);
}
}
|
实例化并输出:
1 2 | IPlayGame sp = new SmartPhone();
sp.playGame(); //智能手机可以玩游戏
|
在接口在使用过程当中,还经常与匿名内部类配合使用,匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称。
1 2 3 4 5 6 7 8 | //第一种实现方法IPlayGame ip1 = new IPlayGame() {
@Override public void playGame() {
System.out.println("匿名内部类的方法实现接口" + todo); //匿名内部类的方法实现接口可以玩游戏 }
};
ip1.playGame(); //调用接口方法//第二种实现方法new IPlayGame() {
@Override public void playGame() {
System.out.println("匿名内部类的方法实现接口" + todo); //匿名内部类的方法实现接口可以玩游戏 }
}.playGame();
|