对抽象类理解的还不是很透彻,想问问这个抽象类怎么用呀,谢谢了
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);
}
}