什么是抽象类? 什么时候用抽象类? 怎么判定这个类是不是抽象类?

程序员成长之旅 · 程序员成长之旅/Java学习/笔记 · 554 字

什么是抽象类? 什么时候用抽象类? 怎么判定这个类是不是抽象类?

  1. 在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。也就是说抽象类是约束子类必须要实现哪些方法,而并不关注方法如何去实现。

  2. 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。

  3. 另外, 所有继承该类的子类必须实现所有定义的抽象方法.

所以由上可知,抽象类是限制规定子类必须实现某些方法,但不关注实现细节。

如何判读这个类是不是抽象类?

只要该类中定义了一个抽象方法, 那么这个类就是抽象类.

语法


//定义抽象类

public abstract class 类名 //注意abstract是在class前面的

//定义抽象方法

public abstract 返回值 方法名(); //只需定义方法名 返回值类型 参数列表  无需写出具体实现

除此之外还需要注意

抽象类中可以包含普通的方法(不能和抽象方法同名),也可以没有抽象方法

抽象类的对象不能直接创建,通常是定义引用变量指向子类对象。

演示代码


public abstract class TelPhone{

public abstract void call();

public abstract void message();

}

public class IPone extends TelPhone {

@Override

public void call(){

System.out.println("用iPhone打电话");;

}

@Override

public void message(){

System.out.println("用iPhone发短信");

}

}

public class XiaoMi extends TelPhone{

@Override

public void call() {

System.out.println("用小米打电话");

}

@Override

public void message() {

System.out.println("用小米发短信");

}

}

最后用test来测试


public class Test {

public static void main(String[] args){

//TelPhone phone = new TelPhone();//这里就不能创建抽象类的对象了

TelPhone useiPhone = new IPone();//创建TelPhone类型的useiPhone并且引用到IPhone

TelPhone useXiaoMi= new XiaoMi();//类似

useiPhone.call();//使用IPhone身份去打电话

useiPhone.message();

useXiaoMi.call();

useXiaoMi.message();

}

}

运行结果


用iPhone打电话

用iPhone发短信

用小米打电话

用小米发短信