Java练习题---------继承

第一题继承的应用

定义宠物类( Pet ),猫类(Cat)和狗类(Dog)
1、宠物都有属性姓名(name)和年龄(age)
2、宠物都有吃(eat)、喝(drink)、叫(shout)的方法
3、猫有爬树( climbTree )的方法
4、狗有警戒( police)的方法

package Day0811;

public class demo2 {

	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.name = "cat";
		cat.age = 3;
		cat.drink();
		cat.eat();
		cat.shout();
		cat.climTree();
		
		Dog dog = new Dog();
		dog.name = "dog";
		dog.age = 3;
		dog.eat();
		dog.drink();
		dog.shout();
		dog.police();
	}

}
package Day0811;

public class Pet {
	public String name;
	public int age;
	
	public void eat(){
		System.out.println("年龄"+this.age+"的"+this.name+"吃饭了!");
	}
	public void drink(){
		System.out.println("年龄"+this.age+"的"+this.name+"喝水了!");
	}
	public void shout(){
		System.out.println("年龄"+this.age+"的"+this.name+"在发出叫声!!");
	}

}
package Day0811;

public class Cat extends Pet{
	public void climTree(){
		System.out.println("年龄"+super.age+"的"+super.name+"猫爬树了");
	}
	//在这个地方使用this和super暂时发现输出都一样,this调用本类,super调用父类
}
package Day0811;
public class Dog extends Pet{
	public void police(){
		System.out.println("年龄"+this.age+"的"+this.name+"狗在警戒!!");
	}
	
}
package Day0811;

public class demo2 {
	public static void main(String[] args) {
		Cat cat = new Cat();
		cat.name = "cat";
		cat.age = 3;
		cat.drink();
		cat.eat();
		cat.shout();
		cat.climTree();
		
		Dog dog = new Dog();
		dog.name = "dog";
		dog.age = 3;
		dog.eat();
		dog.drink();
		dog.shout();
		dog.police();
	}

}

第二题方法重写的应用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABfEXW7B-1628679445930)(https://i.loli.net/2021/08/11/ljIXaKt4FoCrYBz.png)]

// 下面的代码只是实现基本要求,没有完善,以后看情况
package Day0811;

public class demo3 {
	public static void main(String[] args) {
		BankCard bc = new BankCard();
		bc.balance = 2000.0;
		bc.draw(1000.0);
		bc.deposit(1000.0);
		
		CreditCard cc = new CreditCard();
		cc.balance = 2000.0;
		cc.draw(3000.0);
		cc.deposit(2000.0);
	}
}
package Day0811;

public class BankCard {
	public static double balance;
	
	//存钱
	public void deposit(double money){
		System.out.println("你的余额为:"+this.balance);
		System.out.println("存钱过后的余额为:"+(this.balance+money));
	}
	//取钱
	public void draw(double money){
		System.out.println("你的余额为:"+this.balance);
		System.out.println("取钱过后的余额为:"+(this.balance-money));
	}
}
package Day0811;

public class CreditCard extends BankCard{
	public double overdraft = 1000.0;
	
	@Override
	public void draw(double money){
		System.out.println("你的余额为:"+this.balance);
		System.out.println("你还可以透支的余额为:"+this.overdraft);
		System.out.println("取钱过后的银行卡的余额为:"+(this.balance-money));
		System.out.println("取钱过后的信用卡的余额为:"+(this.overdraft+(this.balance-money)));
	}
}

第三题

定义银行卡和信用卡类,完成下列功能

1、完成银行卡的存取款方法
银行卡有余额,卡号,户主等属性
有存款和取款的方法(取款时候余额不足要有提示)
2、完成信用卡的取款方法
信用卡额外有透支额度属性
信用卡重写取款方法(取款时候余额不足要有提示)
3、写测试案例,分别测试银行卡和信用卡的存取款功能(存取款后显示余额)

// 额。。。差不多将上面那个优化了一下,除了测试类没有添加输入方法,这个我就不写了,剩下的还要进行优化,我也不继续优化了,知道怎么用就行了

package Day0811;

public class demo3 {
	public static void main(String[] args) {
		System.out.println("银行卡:");
		BankCard bc = new BankCard();
		bc.balance = 2000.0;
		bc.deposit(1000.0);
		bc.draw(1000.0);
		System.out.println("信用卡:");
		CreditCard cc = new CreditCard();
		cc.balance = 2000.0;
		cc.draw(3000.0);
		cc.deposit(2000.0);
	}
}
package Day0811;

import java.util.Scanner;

public class BankCard {
	public double balance;
	public double sum;
	Scanner sc = new Scanner(System.in);
	
	//存钱
	public void deposit(double money){
		sum = this.balance+money;
		System.out.println("你的余额为:"+this.balance);
		System.out.println("存钱过后的余额为:"+sum);
	}
	//取钱
	public void draw(double money){
		System.out.println("你的余额为:"+sum);
		boolean flag = true;
		while(flag){
			if(money > sum){
				System.out.println("余额不足!请重新输入要取出金额:");
				money = sc.nextDouble();
			}else{
				System.out.println("取钱过后的余额为:"+(sum-money));
				break;
			}
			
		}
	}
}
package Day0811;

import java.util.Scanner;

public class CreditCard extends BankCard{
	public double overdraft = 1000.0;
	Scanner sc = new Scanner(System.in);
	
	
	@Override
	public void draw(double money){
		double sum = this.balance + overdraft;
		System.out.println("你银行卡的余额为:"+this.balance);
		System.out.println("你可以取出的余额为:"+sum);
		System.out.println("你还可以透支的余额为:"+this.overdraft);
		boolean flag =true;
		while(flag){
			if(this.balance<money){
				System.out.println("银行卡余额不足,需要透支信用卡!");
				if(sum >= money){
					System.out.println("取钱过后还可从银行卡和信用卡取出的的余额为:"+(sum-money));
					System.out.println("银行卡的余额为:0");
					break;
				}else{
					System.out.println("银行卡和信用卡加起来的余额不足!请重新输入要取出金额:");
					money = sc.nextDouble();
				}
				
			}else{
				System.out.println("银行卡余额足!银行卡还可以取出的金额为:"+(this.balance-money));
				System.out.println("还可以透支的信用卡余额为:"+overdraft);
				break;
			}
			
		}
		
		
	}
}

第四题

通过继承实现员工工资核算打印功能

1、有员工类(父类),普通员工类(员工类的子类)和部门经理类(员工类的子类)
普通员工工资=单日工资* 天数 * 等级(1);部门经理工资=1000+单日工资天数等级(1.2)。
2、员工类的属性和方法
属性:单日工资,工作天数,工资等级静态常量
方法:打印工资方法
3、子类按照本类特点重写打印工资方法
4、写测试类,输出各类的工资(同时代码验证重写的规则)

package Day0811;

public class demo4 {

	public static void main(String[] args) {
		GeneralStaff gs = new GeneralStaff();
		gs.dailyWage = 100.0;
		gs.day = 20;
		gs.grade = 1.0;
		gs.print();
		
		Manager m = new Manager();
		m.dailyWage = 100.0;
		m.day = 20;
		m.grade = 1.0;
		m.print();
		

	}

}
package Day0811;

public class Manager extends Employee{

	@Override
	public void print() {
		System.out.println("部门经理的工资为:"+(1000.0+dailyWage*day*grade));
	}
	
	
}
package Day0811;

public class GeneralStaff extends Employee{
	
	@Override
	public void print() {
		System.out.println("普通员工的工资为:"+(dailyWage*day*grade));
	}
}
package Day0811;

public class Employee {
	public static double dailyWage;
	public static int day;
	public static double grade;
	
	public void print(){
		
	}

}

第五题综合应用1

  1. 张老太养了两只猫:一只叫小花,今年3岁白色。另一只叫小白,今年3岁花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字、年龄、颜色。如果输入的小猫名错误,则显示:张老太没有这只猫。
    实现思路:
  1. 创建猫类,定义三个变量:姓名 年龄 颜色,变量均私有
  2. 给这3个变量提供set和get方法
  3. 定义打印信息的方法
  4. 创建测试类
  5. 创建2只猫,用set方式赋值,信息和题意一致
  6. 创建键盘录入对象,录入猫的姓名
  7. 判断键盘录入的姓名和这2只猫的姓名是否一致,如果一致就打印这只猫的信息,
    如果不一致提示没有这只猫,请重新输入
  1. 评分标准:
    (1) 正确创建猫类 (10分)
    (2) 正确定义私有属性和方法(10分)
    (3) 正确定义打印方法(10分)
    (4) 创建测试类,创建两个对象(10分)
    (5) 正确输入猫的信息(10分)
    (6) 判断两只猫是否是同一个猫(10分)
    (7) 打印输出信息(10分)
    (8) 正确调用方法,输出信息(10分)
    (9) 添加注释(5分)
package Day0810;

import java.util.Scanner;

public class demo1 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		Cat c1 = new Cat("小花","白色",3);		
		Cat c2 = new Cat("小白","花色",3);
		
		System.out.print("请输入名字:");
		String name ;
		name = sc.next();
		while(true){
			if(name.equals(c1.getName())){
				c1.print();
				break;
			}else if(name.equals(c2.getName())){
				c2.print();
				break;
			}else{
				System.out.println("张老太没有这只猫,请重新输入");
				name = sc.next();
			}
		}
	}

}
package Day0810;

import java.util.Scanner;

public class demo1 {
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		Cat c1 = new Cat("小花","白色",3);		
		Cat c2 = new Cat("小白","花色",3);
		
		System.out.print("请输入名字:");
		String name ;
		name = sc.next();
		while(true){
			if(name.equals(c1.getName())){
				c1.print();
				break;
			}else if(name.equals(c2.getName())){
				c2.print();
				break;
			}else{
				System.out.println("张老太没有这只猫,请重新输入");
				name = sc.next();
			}
		}
	}

}

第六题综合应用2

  1. 按要求完成以下题目:

案例效果:

卡车的收费为: 600000.0
火车的收费为: 1250000.0

案例题目描述:
A. 编写两个类继承运输工具类:卡车类、火车类
要求:
(1)添加两个变量,并进行封装。
(2)添加无参构造方法和有参构造方法,并通过有参构造为重量和距离两个变量赋值
(3) 重写父类计算运费的方法如下:
a. 卡车:运费=重量x距离x120,当距离大于1000(km)或者重量大于60(t)的时候拒载,拒载时间方法返回-1。
b. 火车:当距离在900(km)内(包含900)时,运费=重量x距离X250,大于900(km)时,运费=重量x距离x300。
B. 编写测试类,创建卡车和火车类对象,调用计算运费方法

  1. 评分标准:
    (1) 正确定义工具类 (10分)
    (2) 正确定义火车类(10分)
    (3) 正确定义卡车类(10分)
    (4) 卡车重写父类方法(10分)
    (5) 火车重写父类方法(10分)
    (6) 正确定义各类的方法(10分)
    (7) 创建测试类,创建对象调用方法(10分)
    (8) 输出所有变量信息(10分)
    (9) 添加注释(5分)
package Day0811;

public class demo5 {

	public static void main(String[] args) {
		Truck tc = new Truck(60,800);
		Train ta = new Train(60,80);
		System.out.println("货车:-----------");
		tc.Carriage();
		System.out.println("火车:-----------");
		ta.Carriage();

	}

}
package Day0811;

public class Tool {
	public double weight; //重量
	public double distance; //距离
	
	public Tool(double weight, double distance) {
		super();
		this.weight = weight;
		this.distance = distance;
	}
	public Tool() {
		super();
	}
	public void Carriage(){
		
	}
	
	

}
package Day0811;

public class Truck extends Tool{

	@Override
	public void Carriage() {
		double sum;
		if(time() == -1){
			System.out.println("拒载");
		}else{
			sum = weight * distance * 120.0;
			System.out.println("货物的重量是:"+weight);
			System.out.println("货物的运送的距离是:"+distance);
			System.out.println("运费为:"+sum);
		}
	}
	public int time(){
		int index = 1;
		if(weight>60 || distance>1000){
			index = -1;
		}
		return index;
	}
	public Truck(double weight, double distance) {
		super();
		this.weight = weight;
		this.distance = distance;
	}

}
package Day0811;

public class Train extends Tool{

	@Override
	public void Carriage() {
		double sum;
		if(this.distance <= 900){
			sum = weight * distance * 250.0;
			System.out.println("货物的重量是:"+weight);
			System.out.println("货物的运送的距离是:"+distance);
			System.out.println("运费为:"+sum);
		}else{
			sum = weight * distance * 300.0;
			System.out.println("货物的重量是:"+weight);
			System.out.println("货物的运送的距离是:"+distance);
			System.out.println("运费为:"+sum);
		}
	}
	public Train(double weight, double distance) {
		super();
		this.weight = weight;
		this.distance = distance;
	}
	
	

}

拓展练习

第一题

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

package Day0811;

public class test1 {

	public static void main(String[] args) {
		Auto a = new Auto(4,"红色",9,75.0);
		a.speedUp();
		a.speedDown();
		a.parking();
		
		Car c = new Car();
		c.color = "白";
		c.speed = 195.0;
		c.weight = 3;
		c.setAc("格力");
		c.setCD("死了都要爱");
		c.tyre = 4;
		c.speedDown();
		c.speedUp();
		c.parking();
	}

}
package Day0811;

public class Auto {
	public int tyre;
	public String color;
	public double weight;
	public double speed;
	
	
	public void speedUp(){
		System.out.println("重"+this.weight+"吨的"+this.tyre+"轮"+this.color+"汽车以"+this.speed+"的速度加速了!");
	}
	public void speedDown(){
		System.out.println("重"+this.weight+"吨的"+this.tyre+"轮"+this.color+"汽车以"+this.speed+"的速度减速了!");
	}
	public void parking(){
		System.out.println("重"+this.weight+"吨的"+this.tyre+"轮"+this.color+"汽车以"+this.speed+"的速度停车了!");
	}
	public Auto() {
		super();
	}
	public Auto(int tyre, String color, double weight, double speed) {
		super();
		this.tyre = tyre;
		this.color = color;
		this.weight = weight;
		this.speed = speed;
	}

}
package Day0811;

public class Car extends Auto{
	private String ac;
	private String CD;
	

	public String getAc() {
		return ac;
	}

	public void setAc(String ac) {
		this.ac = ac;
	}

	public String getCD() {
		return CD;
	}

	public void setCD(String cD) {
		CD = cD;
	}

	@Override
	public void speedUp() {
		System.out.println("重"+this.weight+"吨的"+this.tyre+"轮"+this.color+"色的小汽车以"
				+this.speed+"的速度加速了!"+"并且拥有"+this.ac+",放着"+this.CD+"过来了");
	}

	@Override
	public void speedDown() {
		System.out.println("重"+this.weight+"吨的"+this.tyre+"轮"+this.color+"色的小汽车以"
				+this.speed+"的速度减速了!"+"并且拥有"+this.ac+",放着"+this.CD+"过来了");
	}

}

第二题

​ 写一个Person类,有编号id,姓名name,职位job。

构造方法带三个参数。

方法:

登陆login

注册register

自我介绍talk

写一个学生Student类继承Person类,方法有:考试test

属性有:学费money

​ 写一个老师Teacher类继承Person类,

属性有 工资salary

方法有:工作work

​ 写一个测试类TestPerson,测试学生和老师

学生:姓名-张三 职位-学生 学费-18000

老师:姓名-李四 职位-老师 工资-8000

package Day0811;

public class TestPerson {

	public static void main(String[] args) {
		Student stu = new Student();
		stu.name = "张三";
		stu.job = "学生";
		stu.id = "001235";
		stu.setMoney(18000);
		stu.register();
		stu.login();
		stu.talk();
		stu.test();
		
		Teacher tc = new Teacher();
		tc.name = "李四";
		tc.job = "老师";
		tc.id = "000001";
		tc.setSalary(8000.0);
		tc.register();
		tc.login();
		tc.talk();
		tc.work();

	}

}
package Day0811;

public class Person {
	public String id;
	public String name;
	public String job;
	
	public void login(){
		System.out.println(this.name+"登录");
	}
	public void register(){
		System.out.println(this.name+"正在注册");
	}
	public void talk(){
		System.out.println(this.name+"正在自我介绍:");
		System.out.println("我的名字是:"+this.name+
				",我的编号是:"+this.id+",我的职位是:"+this.job);
	}
	
	public Person() {
		super();
	}

	public Person(String id, String name, String job) {
		super();
		this.id = id;
		this.name = name;
		this.job = job;
	}
	
	
	

}
package Day0811;

public class Student extends Person{
	private double money;
	
	public void test(){
		System.out.println(this.name+"正在考试");
	}

	public double getMoney() {
		return money;
	}

	public void setMoney(double money) {
		this.money = money;
	}
	

}
package Day0811;

public class Teacher extends Person{
	private double salary;
	
	public void work(){
		System.out.println(this.name+"老师正在工作!");
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}
	

}

第三题

定义一个父类:形状类Shapes,里面有两个方法,分别是求面积和周长。

定义一个子类:矩形Rectangle

定义一个子类:三角形 Triagle

定义一个子类:圆 Circle

定义一个测试类:传入圆的半径4 输出周长和面积

​ 传入矩形的长和宽4,5 输出周长和面积

​ 传入三角形三边:3,4,5 输出周长和面积

package Day0811;

public class Test2 {

	public static void main(String[] args) {
		Rectangle rc = new Rectangle();
		rc.low = 100.0;
		rc.high = 50.0;
		rc.area();
		rc.perimeter();
		
		Circle c = new Circle();
		c.radius = 20.0;
		c.area();
		c.perimeter();
		
		Triagle t = new Triagle();
		t.high = 3.0;
		t.low = 4.0;
		t.radius = 5.0;
		t.area();
		t.perimeter();

	}

}
package Day0811;

public class Shapes {
	public double low;
	public double high;
	public double radius;//半径
	
	public void area(){
		
	}
	public void perimeter(){
		
	}

}
package Day0811;

public class Rectangle extends Shapes {

	@Override
	public void area() {
		System.out.println("矩形的面积为:"+(this.low*this.high));
	}

	@Override
	public void perimeter() {
		System.out.println("矩形的周长为:"+(this.low+this.high)*2);
	}
	
}
package Day0811;

public class Triagle extends Shapes{
	
	@Override
	public void area() {
		System.out.println("三角形的面积为:"+(this.low*this.high));
	}

	@Override
	public void perimeter() {
		System.out.println("三角形的周长为:"+(this.low+this.high+this.radius));
	}
}
package Day0811;

public class Circle extends Shapes{
	
	@Override
	public void area() {
		System.out.println("圆的面积为:"+(3.14 * this.radius * this.radius));
	}

	@Override
	public void perimeter() {
		System.out.println("圆的周长为:"+(2*3.14*this.radius));
	}
}
lic void area(){
		
	}
	public void perimeter(){
		
	}

}
package Day0811;

public class Rectangle extends Shapes {

	@Override
	public void area() {
		System.out.println("矩形的面积为:"+(this.low*this.high));
	}

	@Override
	public void perimeter() {
		System.out.println("矩形的周长为:"+(this.low+this.high)*2);
	}
	
}
package Day0811;

public class Triagle extends Shapes{
	
	@Override
	public void area() {
		System.out.println("三角形的面积为:"+(this.low*this.high));
	}

	@Override
	public void perimeter() {
		System.out.println("三角形的周长为:"+(this.low+this.high+this.radius));
	}
}
package Day0811;

public class Circle extends Shapes{
	
	@Override
	public void area() {
		System.out.println("圆的面积为:"+(3.14 * this.radius * this.radius));
	}

	@Override
	public void perimeter() {
		System.out.println("圆的周长为:"+(2*3.14*this.radius));
	}
}

问题?

为什么有时候子类继承父类时,子类必须需要添加构造方法,否则会报错?但是我上面的那些继承都不用,但是也可以运行?

问题出现原因:
https://blog.csdn.net/yyuggjggg/article/details/119633332

  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值