javaSE-oop 继承

【练习题】1.继承:

定义一个名为Vehicles(交通工具)的基类,该类中应包含String类型的成员属性brand(商标)和color(颜色),还应包含成员方法run(行驶,在控制台显示“我已经开动了”)和showInfo(显示信息,在控制台显示商标和颜色),并编写构造方法初始化其成员属性。

编写Car(小汽车)类继承于Vehicles类,增加int型成员属性seats(座位),还应增加成员方法showCar(在控制台显示小汽车的信息),并编写构造方法。 编写Truck(卡车)类继承于Vehicles类,增加float型成员属性load(载重),还应增加成员方法showTruck(在控制台显示卡车的信息),并编写构造方法。 在main方法中测试以上各类。

package oop_shiYanSan_1;

class Vchicles{

String brand;

String color;

Vchicles(String brand,String color){

this.brand = brand;

this.color = color;

}

 

//run方法

public void run() {

System.out.println("我已经开动了。");

}

 

//显示信息

public void showinfo() {

System.out.println("车的品牌:"+brand+";"+"车的颜色:"+color);

}

 

}

class Car extends Vchicles{

    int seats;

    

    Car(String brand, String color) {

super(brand, color);

}

    

    public void run() {

        System.out.println("开起来真舒服。");

    }

    

    public void showCar() {

    System.out.println("这是一辆轿车,车的品牌是:"+brand+","+"颜色是"+color+","+"座位有:"+seats+"个");

    }

}

 

class Truck extends Vchicles{

    

    float load;

Truck(String brand, String color) {

super(brand, color);

}

 

public void run() {

        System.out.println("开起来稳得一批。");

    }

 

public void showTruck() {

System.out.println("这是一辆卡车,车的品牌是:"+brand+","+"颜色是"+color+","+"载重是:"+load+"千克");

}

 

}

 

public class _1 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

        Vchicles v = new Vchicles("红旗","黑色");

        v.run();

        v.showinfo();

        

        Car c = new Car("一汽","白色");

        c.seats = 5;

        c.run();

        c.showCar();

        

        Truck t = new Truck("奔驰","红色");

        t.load = 2600;

        t.run();

        t.showTruck();

}

 

}

【练习题】2.继承:

编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。

package oop_shiYanSan_1;

class Calculatol{

int a,b;

 

public Calculatol(int a, int b) {

super();

this.a = a;

this.b = b;

}

 

public int add() {

int sum = a+b;

System.out.println(a+"+"+b+"="+sum);

return sum;

}

 

public int sub() {

int sum = a-b;

System.out.println(a+"-"+b+"="+sum);

return sum;

}

 

}

 

class Calculate2 extends Calculatol{

 

public Calculate2(int a, int b) {

super(a, b);

 

}

 

public int mul() {

int sum = a*b;

System.out.println(a+"*"+b+"="+sum);

return sum;

}

 

public int div() {

int sum = a/b;

System.out.println(a+"/"+b+"="+sum);

return sum;

}

 

}

public class _2 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

        Calculatol c = new Calculatol(4,5);

        c.add();

        c.sub();

        

        Calculate2 c1 = new Calculate2(6,3);

        c1.mul();

        c1.div();

}

 

}

【练习题】3.包、继承、构造函数

编写一个控制台应用程序,完成下列功能,并回答提出的问题。

       1) 创建一个类A,在构造函数中输出“A”,再创建一个类B,在构造函数中输出“B”。

       2) 从A继承一个名为C的新类,并在C内创建一个成员变量B。不要为C创建构造函数。

   3) 在Main方法中创建类C的一个对象,写出运行程序后输出的结果。

   4) 如果在C中也创建一个构造函数输出“C”,整个程序运行的结果又是什么?

package oop_shiYanSan_1;

class A{

A(){

System.out.println("A");

}

}

 

class B{

B(){

System.out.println("B");

}

}

 

class C extends A{

int B;

C(){

System.out.println("C");

}

}

public class _3 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

        C c = new C();

        

}

 

}

【练习题】4.继承:

建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入输出的功能。

package oop_shiYanSan_1;

class Resident{

int id;

String name;

String date;

 

public void showInfo() {

System.out.println("此人的id号是:"+id+","+"姓名是:"+name+","+"出生日期是:"+date);

}

}

class Person extends Resident{

String study;

String work;

 

public void showInfo() {

System.out.println("此人的id号是:"+id+","+"姓名是:"+name+","+"出生日期是:"+date);

System.out.println("学历是:"+study+","+"工作是:"+work);

}

 

}

 

class Officer extends Resident{

String party;

String duty;

public void showInfo() {

System.out.println("此人的id号是:"+id+","+"姓名是:"+name+","+"出生日期是:"+date);

System.out.println("党派是:"+party+","+"职位是:"+duty);

}

}

 

public class _4 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

        Resident r = new Resident();

        r.id = 101;

        r.name = "狄仁杰";

        r.date = "1998-7-8";

        r.showInfo();

        

        Person p = new Person();

        p.name = "白起";

        p.id = 102;

        p.date = "1999-5-6";

        p.study = "硕士";

        p.work = "老师";

        p.showInfo();

        

        Officer o = new Officer();

        o.name = "曹操";

        o.id = 103;

        o.date = "1999-9-10";

        o.party = "共产党";

        o.duty = "主席";

        o.showInfo();

        

}

 

}

【练习题】5.覆盖、继承

建立一个汽车Auto类,包括轮胎个数,汽车颜色,车身重量、速度等成员变量。并通过不同的构造方法创建实例。至少要求: 汽车能够加速,减速,停车。 再定义一个小汽车类Car,继承Auto,并添加空调、CD等成员变量,覆盖加速,减速的方法

package oop_shiYanSan_2;

 

 

class Auto{

  int num;

  String color;

  int weight;

  int speed;

   

  Auto(int num,String color){

  this.num = num;

  this.color = color;

  }

   

  Auto(int weight,int speed){

  this.weight = weight;

  this.speed = speed;

  }

   

  Auto(String color,int speed){

  this.color = color;

  this.speed = speed;

  }

   

  //加速

  public void speedUp(int n) {

  speed = speed + n;

  System.out.println("此时汽车正在加速,加速度为:"+n);

  System.out.println("加速过后,速度变为了:"+speed);

  }

   

  //减速 停车

  public void speedDown(int n) {

  speed = speed - n;

  System.out.println("此时汽车正在减速,减速度为:"+n);

  System.out.println("减速过会,速度变为了:"+speed);

  if(speed == 0) {

  System.out.println("汽车速度变为了0,停在了路边。");

  }

  }

   

  Auto(){

   

  }

   

}

 

class Bus extends Auto{

boolean Kongtiao;

boolean CD;

 

Bus(String color,int speed, boolean Kongtiao,boolean CD){

super(color,speed);

this.Kongtiao = Kongtiao;

this.CD = CD;

}

 

//开空调

public void openKongTiao() {

System.out.println("打开空调,现在变得凉快很多。");

}

 

//播放音乐

public void openPlayer() {

System.out.println("打开音乐播放器,播放音乐。");

}

 

//重写加速

public void speedUp(int n) {

while(speed <= 80) {

if(speed == 80) {

System.out.println("速度已经超过80,请注意安全。汽车加速系统关闭。");  

break;

}else {

speed = speed + n;

System.out.println("汽车正在加速,清注意速度,不能超速。"+"当前速度是:"+speed);

}

}

 

}

 

 

    //重写减速

    public void speedDown(int n) {

    

    while(speed > 0) {

       speed = speed - n;

       System.out.println("汽车开始减速。注意看后面。"+"当前的速度是:"+speed );

       if(speed == 0) {

    System.out.println("速度已经减为了0,汽车停在了路边。");

    break;

       }

        }

 

     }

    

}

 

public class _5 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

        Auto a = new Auto(4,"blue");

        a.speed = 50;

        a.speedUp(10);

        

        System.out.println("汽车正在开始减速:");

        while(a.speed != 0) {

        a.speedDown(10);

        }

        

        Bus bus = new Bus("bule",40,true,true);

        bus.openKongTiao();

        bus.openPlayer();

        bus.speedUp(10);

        bus.speedDown(10);

 

}

 

}

 

【练习题】6.类的继承,super

1、写一个名为Account的类模拟账户。该类的属性和方法如下图所示。该类包括的属性:账号id,余额balance,年利率annualInterestRate;包含的方法:访问器方法(getter和setter方法),返回月利率的方法getMonthlyInterest(),取款方法withdraw(),存款方法deposit()。

Account

private int id

private double balance

private double annualInterestRate

public Account (int id, double balance, double annualInterestRate )

public int getId()

public double getBalance()

public double getAnnualInterestRate()

public void setId( int id)

public void setBalance(double balance)

public void setAnnualInterestRate(double annualInterestRate)

public double getMonthlyInterest()

public void withdraw (double amount)

public void deposit (double amount)

写一个用户程序测试Account类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%的Account对象。使用withdraw方法提款30000元,并打印余额。

再使用withdraw方法提款2500元,使用deposit方法存款3000元,然后打印余额和月利率。

 

提示:在提款方法withdraw中,需要判断用户余额是否能够满足提款数额的要求,如果不能,应给出提示。

运行结果如图所示:

 

 

 

 

 

 

 

 

 

2、创建Account类的一个子类CheckAccount代表可透支的账户,该账户中定义一个属性overdraft代表可透支限额。在CheckAccount类中重写withdraw方法,其算法如下:

如果(取款金额<账户余额),

可直接取款

如果(取款金额>账户余额),

计算需要透支的额度

判断可透支额overdraft是否足够支付本次透支需要,如果可以

    将账户余额修改为0,冲减可透支金额

如果不可以

    提示用户超过可透支额的限额

 

要求:写一个用户程序测试CheckAccount类。在用户程序中,创建一个账号为1122、余额为20000、年利率4.5%,可透支限额为5000元的CheckAccount对象。

使用withdraw方法提款5000元,并打印账户余额和可透支额。

再使用withdraw方法提款18000元,并打印账户余额和可透支额。

再使用withdraw方法提款3000元,并打印账户余额和可透支额。

 

提示:

  1. 子类CheckAccount的构造方法需要将从父类继承的3个属性和子类自己的属性全部初始化。
  2. 父类Account的属性balance被设置为private,但在子类CheckAccount的withdraw方法中需要修改它的值,因此应修改父类的balance属性,定义其为protected。

 

 

运行结果如下图所示:

package oop_shiYanSan_2;

class Account{

int id;

double balance;

double annualInterestRate;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public double getBalance() {

return balance;

}

public void setBalance(int balance) {

this.balance = balance;

}

public double getAnnualInterestRate() {

return annualInterestRate;

}

public void setAnnualInterestRate(int annualInterestRate) {

this.annualInterestRate = annualInterestRate;

}

 

//构造器

public Account(int id,double balance,double annualInterestRate) {

this.id = id;

this.balance = balance;

this.annualInterestRate = annualInterestRate;

}

 

//存款

public void deposit(double amount) {

balance = balance + amount;

System.out.println("存进的数目是:"+amount+","+"当前的余额是:"+balance);

 

}

 

//取款

 

public void withdraw(double amount) {

if(amount > balance) {

System.out.println("余额不足!");

System.out.println("您的账户余额为:"+balance);

}else {

balance = balance - amount;

System.out.println("取款的数目是:"+amount+","+"当前的余额是:"+balance);

}

 

}

 

}

public class _6 {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

        Account a = new Account(101,20000,0.045);

        a.withdraw(30000);

        a.deposit(2500);

        double rate = a.getAnnualInterestRate();

        System.out.println("月利率是:"+rate/12);

}

 

}

实验一 C++简单程序设计(2学时) 1.编程计算图形的面积。程序可以计算圆形、长方形、正方形的面积、运行时先提示用户选择图形类型,然后,对圆形要求用户输入半径、对长方形要求用户输入长和宽的值,对正方形要求用户输入边长,计算出面积后将其显示出来。要求使用debug调试功能观察程序运行变量值的变化情况。 2.定义一个表示时间的结构体,可以精确的表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。 实验二 函数的应用(2学时) 1.编写重载函数Max1,分别求出两个整数,两个双精度数,三个整数,三个双精度数的最大值。 2.使用重载函数模板重新实现上面的函数Max1。 要求:(1)练习重载函数的使用;(2) 练习函数模板的使用。 实验三 类与对象(2学时) 1.声明一个Dog类,包含age、weight等属性,以及对这些属性操作的方法。实现并测试这个类。 2.设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角和右上角两个点的坐标,有成员函数能计算矩形的面积。 3.定义一个CPU类,包含等级、频率,电压等属性,并编写构造函数、析构函数,以及成员函数run、stop模拟CPU的状态。其,等级为整型,频率为单位是兆赫兹的整数,电压为浮点型。要求自己设计各个属性的标识。 4.定义一个简单的Computer类,包含数据成员cpu、ram、cdrom等等,有两个成员函数run、stop。其cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。 5.(必做)设计一个用于人事管理的People类。考虑到通用性,可以只抽象出所有人员都 具有的属性:number(编号),sex(性别) ,birthday(出生日期),id(身份证号)等等。其“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员函数的录入和显示。要求包括:编写构造函数和析构函数、拷贝构造函数、内联成员函数,类的组合。 实验四 C++程序的结构(2学时) 1.编写程序,实现并测试客户机(Client)类。定义字符型静态数据成员ServerName[10],保存其服务器名称;整型静态数据成员ClientNum,记录定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h定义类,在文件client.cpp实现,在文件test.cpp测试这个类,观察相应的成员变量的取值的变化情况。 2、在实验三题目5编写的人员类设计适当的方法来实现类数据的共享性,并采用多文件结构实现程序。 3.(选做)定义类X、Y、Z,函数h(X *),满足:类X有私有成员i,Y的成员函数g(X *)是X的友元函数,实现对X的成员i加1,类Z是类X的友元类,其成员函数f(X *)实现对X的成员i加5,函数h(X *)是X的友元函数,实现对X的成员i加10。在一个文件声明类,在一个文件实现类,在另一个文件测试类。 实验五 继承和派生(2学时) 1.设计并定义一个交通工具类,并通过该类派生出新的类,编写程序定义这些类并测试它; 2.(选做)声明一个基类Shape,在此基础上派生Rectangle和Circle,二者都有GetArea()函数计算对象的面积,编写程序测试。 3.(选做)声明一个哺乳动物类Mammal,再由此派生出狗类Dog,定义一个Dog类的对象,观察基类与派生类的构造函数和析构函数的调用顺序。 4.完善实验四第2题的程序,具体要求如下: 任务1:从people(人员)类派生出student(学生)类,添加属性:学校、学院、专业、班号、入学成绩,设计相应的成员函数(构造函数,拷贝构造函数,录入函数,显示函数)。 任务2:从people类派生出teacher(教师)类,添加属性:职务,部门,职称。并设计相应的成员函数。 任务3:从student类派生出graduate(研究生)类,添加属性:导师,研究方向。并设计相应的成员函数。 任务4:编写程序来测试这个类。 实验六 小型学生管理系统的设计与实现1(2学时) 设计学生类、课程类、成绩类及相应的成员函数。要求能实现学生的信息、课程信息和成绩信息的增加、修改、删除与查询。 实验七 多态性(2学时) 1.定义Point类,有坐标X和Y两个成员变量,对Point类重载++和――运算符,实现对坐标值的改变。 2.定义一个车(Vehicle)类,有run,stop等成员函数,由此派生出自行车(bicycle)类、汽车(car)类,由bicycle类和car类派生出摩托车(motocar)类,它们都包含run,stop等成员函数,编写相应的虚函数并测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值