要求给小伙找对象,男孩子要求对象会说话和做饭
建立一个抽象类,表示不论是什么子类都要有这些功能
注意:
1.我在码代码的时候发现这个抽象类中要求可以使用抽象方法,也可以不适用,但是不适用会标绿
2.没有方法体,只有声明,类似构造一个框架,里面具体要说什么做什么需要后序根据子类补充
第二部分:构造一个子类表示是中国女孩会说你好以及会做水煮鱼
注意:
1.由于我构造的是非抽象子类,所以需要对父类进行重写
2. 需要继承子类,其中我习惯建立一个无参的构造函数
第三步:构造Us女朋友
与上述相同
第四步:构造该男生子类,进行调用上述子类
第五步:构造主函数
注意:
3. 定义的是引用抽象类的对象,但是指向的是子类的对象,因为抽象类是不允许使用new进行声明!!!!
4.
完整代码:
import java.awt.*; import java.util.*; abstract class Girlfriend{ abstract void speak(); abstract void cooking(); } class ChinaGirl extends Girlfriend{ public ChinaGirl(){ } public void speak(){ System.out.println("你好"); } public void cooking(){ System.out.println("水煮鱼"); } } class Usgirl extends Girlfriend{ public Usgirl(){ } public void speak(){ System.out.println("HELLO"); } public void cooking(){ System.out.println("Salad"); } } class Boy { Girlfriend friend; public Boy(){ } public void setGirlfriend(Girlfriend f){ friend=f; } public void getGirlfriend(){ friend.cooking(); friend.speak(); } } public class Hello{ public static void main(String args[]) { Girlfriend girl1=new ChinaGirl(); Boy boy=new Boy(); boy.setGirlfriend(girl1); boy.getGirlfriend(); girl1=new Usgirl(); boy.setGirlfriend(girl1); boy.getGirlfriend(); } }
根据我的理解,抽象类就是给一个框架,只注重于框架的构造,而不在乎具体的内容,就像地图,每个国家都有一个轮廓,那么就可以用抽象类进行定义这个轮廓属性,但是具体轮廓什么样子的是后序子类需要定义的任务,例如内部具有城市,那么也可以用抽象类进行定义城市属性,具体到底有多少个城市,具体如何分布的也是子类的事情
所谓面对抽象编程:就是该类不用面对具体的类,而是面对抽象类
现在我们编写一个程序,实现如下要求:
现在我们需要计算出各种立体图形的体积
分析:
很明显发现图形的体积大部分都和底面积与高有关,所以我们需要计算出该类图形的底面积以及得到高
而图形具体是柱状圆形的都是子类的问题了
所以首先进行构造抽象类
第二步:构建子类求矩形面积以及周长
第三步:建立图形中的一个柱体类为例,由于子类和父类构造的函数一致,子类继承了父类的而么有多余拓展,所以我们这里用子类定义di或者用子类定义di效果都是一样的。但是如果使用子类说明该底面积只能是这一类的,所以我们常常定义为父类,同时也可以调用子类的求面积方法
结果为4
上述过程存在问题,倘若用户要求你求三角形为底的就要更改很多步骤所以我们需要对程序进行修改
import java.awt.*; import java.util.*; abstract class TuXing{ abstract double GetArea(); abstract double GetPerimeter(); public static final double PI=3.1415926; } class JuXing extends TuXing{ double l,w; public JuXing(double l, double w){ this.l=l; this.w=w; } public JuXing(){ } public double GetArea(){ return l*w; } public double GetPerimeter(){ return (l+w)*2; } } class Circle extends TuXing{ double r; public Circle(double r){ this.r=r; } public Circle(){ } public double GetArea(){ return this.r*this.r*PI; } public double GetPerimeter(){ return 2*this.r*PI; } } class ZhuTi{ TuXing di; double h; public ZhuTi(){ } public ZhuTi(TuXing di,double h){ this.di=di; this.h=h; } public TuXing GetDi(){ return di; } public void setDi(TuXing di){ this.di=di; } public double getV(){ return di.GetArea()*h; } public double getC(){ return di.GetPerimeter(); } } public class Hello{ public static void main(String args[]) { TuXing g; g=new JuXing(1,1); ZhuTi k=new ZhuTi(g,3); System.out.println(k.getV()+" "+k.getC()); g=new Circle(2); k=new ZhuTi(g,3); System.out.println(k.getV()+" "+k.getC()); } }
设置机动车类,要求都有刹车功能,使用bus有收费功能,使用taxi有收费和空调功能
第一步:构造抽象类,定义刹车
第二步:构造接口构造收费和空调
第三步构造bus和taxi的类
第四步:构造主函数
总:
import java.awt.*; import java.util.*; abstract class function{ abstract void brake(); } interface MoneyFare{ void charge(); } interface Contro{ void control(); } class Bus extends function implements MoneyFare{ void brake(){ System.out.println("公交车正在刹车"); } public void charge(){ System.out.println("收费六块"); } } class Taxi extends function implements MoneyFare, Contro{ void brake(){ System.out.println("出租车正在刹车"); } public void charge(){ System.out.println("收费三块"); } public void control(){ System.out.println("出租车打开空调"); } } public class Hello{ public static void main(String args[]) { Bus bus11=new Bus(); Taxi buleTaxi=new Taxi(); // MoneyFare fare; // Contro tem; // fare = bus11; bus11.brake(); bus11.charge(); //fare.charge(); //fare =buleTaxi; buleTaxi.brake(); buleTaxi.control(); buleTaxi.charge(); } }
在这里插入代码片