想问问这个抽象类怎么用呀

对抽象类理解的还不是很透彻,想问问这个抽象类怎么用呀,谢谢了

img


public abstract class Printer {
private  String brand;
public Printer(String brand) {
  super();
  this.brand = brand;
  }
  public String getBrand() {
  return brand;
  }
  public void setBrand(String brand) {
  this.brand = brand;
  }
  public abstract void print(String file);  //抽象方法
  }
public class BlackPrinter extends Printer {
public BlackPrinter(String brand) {
  super(brand);
  // TODO Auto-generated constructor stub
  }
  @Override
 public void print(String file) {
 // TODO Auto-generated method stub
  System.out.println(getBrand()+"打印机正在黑白打印"+file);
  }}

public class ColorPrinter extends Printer {
public ColorPrinter(String brand) {
super(brand);
  // TODO Auto-generated constructor stub
  }
  @Override
 public void print(String file) {
  // TODO Auto-generated method stub
  System.out.println(getBrand()+"打印机正在彩色打印"+file);
  }}

public class PrinterTest {
public static void printFile(Printer p,String file) {
p.print(file);
}
public static void main(String[] args) {
Printer blackPrinter=new BlackPrinter("惠普牌");
  printFile(blackPrinter, "简历");

Printer colorPrinter=new ColorPrinter("佳能牌");
  printFile(colorPrinter, "简历");
  }}

抽象类就是用来继承的
把类定义为抽象类,就是为了避免不小心实例化个父类出来
比如一个父类叫动物,猫狗鸡鸭都继承动物
那么每一个具体的动物都应该实例成对应的对象,要么是猫要么是狗,不可以创建一个类型是动物的实例
此时就可以把动物类定义为抽象类
抽象类里就可以有抽象方法,所有那些必须由子类实现,而父类不实现的方法,都可以定义为抽象方法
效果等同于继承此类的子类强制实现一个接口
-=-=-=-=
需要注意的几点:
虽然抽象类不可实例化
但是抽象类里可以有属性,子类会自动继承属性
抽象类里也可以有静态方法,可以有实例方法(虽然父类不会有实例,但子类会继承此方法,除非子类里使用override关键字覆盖),也可以有抽象方法(虚函数)

简单的写一个例子
这是抽象类,有一个属性bread
一个有参构造方法 Printer
一个抽象方法print(没有方法体)

public abstract class Printer {
    public String bread;
    Printer(String bread){
        this.bread = bread;
    }
    
    public abstract void print(String file);
}

这是子类 继承了这个抽象类
@Override 重写了 抽象类里没有实现的print方法

public class BlackPrinter extends Printer {
    BlackPrinter(String bread) {
        super(bread);
    }

    @Override
    public void print(String file) {
        System.out.println(this.bread + file);
    }
}