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);

}

}

猜你喜欢

转载自blog.csdn.net/djx520521/article/details/81270811