使用抽象类和抽象方法时,需要遵循以下原则:
1)在抽象类中,可以包含抽象方法,也可以不包含抽象方法,但是包含了抽象方法的类必须被定义为抽象类;
2)抽象类不能直接被实例化,即使抽象类中没有声明抽象方法,也不能被实例化;
3)抽象类被继承后,子类需要重写抽象类中所有的抽象方法;
4)如果继承抽象类的子类也被声明为抽象类,则可以不用重写子类中所有的抽象方法;
1.创建Shape(图形)类。该类中有一个计算面积的方法,圆形和矩形都继承自图形类,输出图形和矩形的面积。运行效果图:
父类:
package Zaria; public abstract class Shape {//父类 public double l; //长度 public double w; //宽度 public double r; //半径 public double PI;//π public double A; //面积 public abstract double calculate(double l,double w); }
圆形子类:
package Zaria; import java.text.DecimalFormat; public class Roundness extends Shape { public double calculate(double PI,double r){ A=PI*r*r; DecimalFormat decimalFormat1 = new DecimalFormat("#0.##"); // 设置格式为保留两位小数 String formattedNumber1 = decimalFormat1.format(A); // 将数字按指定格式转换成字符串 System.out.println("圆形的面积是:"+formattedNumber1); return A; } }
矩形子类:
package Zaria; public class Rectangle extends Shape{ public double calculate(double l,double w){ A=l*w; System.out.println("矩形的面积是:"+A); return A; } }
主类:
package Zaria; public class Calculate_area { public static void main(String[] args){ Shape shape=new Roundness(); shape.r=2.6; shape.PI=3.14; System.out.println("r:"+shape.r); System.out.println("PI:"+shape.PI); shape.calculate(shape.PI,shape.r); shape=new Rectangle(); shape.w=2; shape.l=2.6; System.out.println("l:"+shape.l); System.out.println("w:"+shape.w); shape.calculate(shape.l,shape.w); } }
2.创建工厂类,工厂类中有一个抽象的生产方法,创建汽车厂和鞋厂类,重写工厂类中的抽象生产方法,输出汽车厂生产的是汽车,鞋厂生产的是鞋。运行效果如下:
父类:
package Zaria; public abstract class Factory { public String goods;//产品 public abstract void product(); }
子类:
package Zaria; public class Automobile_factory extends Factory{ public void product(){ System.out.println("汽车厂生产的是"+goods); } }
子类:
package Zaria; public class Shoe_factory extends Factory{ public void product(){ System.out.println("鞋厂生产的是"+goods); } }
主类:
package Zaria;
public class ToProduct {
public static void main(String[] args){
Automobile_factory Af=new Automobile_factory();
Af.goods="汽车";
Af.product();
Shoe_factory Sf=new Shoe_factory();
Sf.goods="鞋";
Sf.product();
} }