Java基础习题(三)

六、 类与对象

一个类一个.java的文件,类名和文件名相同

1.定义一个公司类Company,包含属性name、telephone、email、product,定义一个显示属性信息的方法print。测试类中创建公司类的对象,给属性赋值,并显示公司的信息。

//Company类
public class Company {
	String name;
	String telephone;
	String email;
	String product;
	void Print(){
		System.out.println( "公司名称:"+name+"\n"
				+"电话:"+telephone+"\n"
				+"邮箱:"+email+"\n"
				+"产品:"+product);
	}
}
//测试类
public class CompanyTest {
		public static void main(String[] args) {
			Company C = new Company();
			C.name = "蓝山咖啡";
			C.telephone = "155555555";
			C.email = "lanshan@163.com";
			C.product = "coffee";
			C.Print();
		}
}

2.定义计算机类Computer,包含属性cpu、main_board、monitor、hard_disk、memory,重写toString方法显示Computer类属性信息。测试类中创建计算机类对象,给属性赋值,并输出相应的信息。

//Computer类
public class Computer {
	String cpu;
	String main_board;
	String monitor;
	String hard_disk;
	String memory;
	public String toString() {
		return"cpu: "+cpu+"\n"
	+"main_board: "+main_board+"\n"
	+"monitor: "+monitor+"\n"
	+"hard_disk: "+hard_disk+"\n"
	+"memory: "+memory+"\n";
	}
}
//测试类
public  class ComputerTest{
		public static void main(String[] args) {
			Computer com = new Computer();
			com.cpu = "I5";
			com.main_board = "1";
			com.monitor = "2";
			com.hard_disk = "3";
			com.memory = "4";
			System.out.println(com.toString());
		}
}

3.定义一个Friend类,包含属性name、email、address、phone,重写toString方法显示Friend类的属性信息。测试类中创建Friend类对象,给属性赋值,并输出相应的信息。

//Friend类
public class Friend {
	String name;
	String email;
	String address;
	String phone;
	public String toString() {
		return "my friend"+"\n"
				+"name:"+name+"\n"
				+"email:"+email+"\n"
				+"add:"+address+"\n"
				+"phone:"+phone;
	}
}
//测试类
public class FrinedTest{
		public static void main(String[] args) {
			Friend first = new Friend();
			first.name = "Ann";
			first.email = "456154@163.com";
			first.address = "Handan";
			first.phone = "1684687123";
			System.out.println(first.toString());
		}
}

4.定义一个账户类Account,属性money,有查询余额方法、存款方法和取款方法,其中,取款方法要进行判断,如果余额不足不能提款。测试类中模拟对一个账户的存取款及余额查询操作。

//Account类
public class Account {
	static int money;
	public static String check() {
			return "余额:"+money+"元";
	}
	public static String save(int m) {
		money += m;
		return "存款后余额:"+money+"元";
	}
	public static String out(int n) {
		money -= n;
		if(money>=0) {
			return "取款后余额:"+money+"元";
		}
		else
			return "余额不足0元,不能提款";
	}
}
//测试类
import java.util.Scanner;
	public class AccountTest{
		public static void main(String[] args) {
			Account person = new Account();
			int action;
			System.out.println("请输入以下操作编号:");
			System.out.println("1.存款");
			System.out.println("2.取款");
			System.out.println("3.查看余额");
			System.out.println("4.退出");
			//输入动作
			Scanner in = new Scanner(System.in);
			action = in.nextInt();
			while(action!=4) {
				if(action==3) {
					System.out.println(person.check());
				}
				else if(action==2) {
					int m;
					System.out.println("请输入取款额:");
					Scanner in2 = new Scanner(System.in);
					m = in2.nextInt();
					System.out.println(person.out(m));
				}
				else if(action==1) {
					int n;
					System.out.println("请输入存款额:");
					Scanner in3 = new Scanner(System.in);
					n = in3.nextInt();
					System.out.println(person.save(n));
				}
				System.out.println("请输入后续操作编号:");
				action = in.nextInt();		//这样就可以循环做输入的动作
			}
			System.out.println("操作结束。");
		}
	}

5.编写程序模拟两个村庄:赵庄和李庄共用同一口井里的水。提示:使用static定义类变量waterAmout模拟水井的数量,在测试类中模拟两个村庄取水的动作及取水后的剩余水量。
(我感觉这道题应该有更好的写法才对)

//村庄类
public class Villages {
	static int waterAmount;
}
//测试类
import java.util.Scanner;
public class VillageTest {
	public static void main(String[] args) {
		int x,y;
		Villages.waterAmount = 5000;
		Villages zhao = new Villages();
		Villages li = new Villages();
		Scanner in1 = new Scanner(System.in);
		System.out.println("输入赵庄取水吨数:");
		x = in1.nextInt();
		System.out.println("赵庄取水"+x+"t");
		Villages.waterAmount -= x;
		System.out.println("剩余水量"+Villages.waterAmount+"t");
		
		Scanner in2 = new Scanner(System.in);
		System.out.println("输入李庄取水吨数:");
		y = in2.nextInt();
		System.out.println("李庄取水"+y+"t");
		Villages.waterAmount -= y;
		System.out.println("剩余水量"+Villages.waterAmount+"t");
	}
}

6.定义电池类Battery和收音机类Radio。Battery类包含属性batteryAmount并重写toString方法输出电池电量;Radio类包含打开收音机方法openRadio(Battery b),假定每打开一次收音机消耗10个单位的电量。在测试类中模拟收音机消耗电池电量操作。

//Battery类
public class Battery {
	int batteryAmount;
	public String toString() {
		return batteryAmount+"%";
	}
}
//Radio类
public class Radio {
	public void openRadio(Battery b){
		b.batteryAmount -= 10;
	}
}
//测试类
public class RadioTest {
	public static void main(String[] args) {
		Battery b = new Battery();
		b.batteryAmount = 100;
        System.out.println("电池的存储电量是:" + b.toString());
        Radio radio = new Radio();
        System.out.println("打开一次收音机");
        radio.openRadio(b);
        System.out.println("收音机使用后的电量为:" + b.toString());
	}
}
七、封装和构造方法

封装快捷键:Shift+Alt +S→R

1.编写一个教材类Book,具有属性:名称(title)、页数(pageNum),其中页数不能少于200页,否则输出错误信息;具有方法:detail,用来输出每本教材的名称和页数。提示:分别给title和pageNum两个属性定义两个方法,一个方法用于设置值,一个方法用于获取值。在测试类中使用无参的构造方法创建Book对象,调用setTitle和setPageNum方法分别给title和pageNum赋值,然后输出教材的相关信息。

//Book类
public class Book {
	private String title;
	private int pageNum;
	public int setpageNum;
	public String settitle;
	public Book() {}	//无参构造
	//封装private的内容
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public int getPageNum() {
		return pageNum;
	}
	public void setPageNum(int pageNum) {	//在这里设置约束条件
		if(pageNum<200) {
			System.out.println("错误信息");
		}
		else
			this.pageNum = pageNum;
	}
	
	public void detail() {
		System.out.println( "教程名称:"+title);
		System.out.println("页数:"+pageNum);
	}
}
//测试类
public class BookTest{
	public  static void main(String[] args) {
		Book a = new Book();
		a.setPageNum(520);		//通过set*去访问调用
		a.setTitle("Java程序设计入门");
		a.detail();

		Book b = new Book();
		b.setPageNum(197);
		b.setTitle("XML");
		b.detail();
	}
}

2.编写一个Rectangle类,定义属性height、width,用构造方法为各属性赋值,要求构造方法中的形参名和成员变量名相同,使用this关键字对成员变量进行调用,然后定义一个计算矩形面积的方法getArea。测试类中输入矩形的长和宽,创建Rectangle类对象,并输出矩形的面积。

//Rectangle类
public class Rectangle {
	private int width;
	private int height;
	
	public int getWidth() {
		return width;
	}
	public void setWidth(int width) {
		if(width>0)
			this.width = width;
		else
			System.out.println("输入错误!");
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		if(height>0)
			this.height = height;
		else
			System.out.println("输入错误!");
	}
	
	public int getArea() {
		return height*width; 
	}
}
//测试类
import java.util.Scanner;
public class RectangleTest {
	public static void main(String[] args) {
		Rectangle ju = new Rectangle();
		Scanner in = new Scanner(System.in);
		System.out.print("请输入宽:");
		ju.setWidth(in.nextInt());		//输入进set里
		System.out.print("请输入长:");
		ju.setHeight(in.nextInt());
		System.out.print("此矩形面积为:");
		System.out.println(ju.getArea());
	}
}

3.设计一个教师类Teacher,包含私有成员变量name(姓名)和workTime(工龄),利用构造函数为其中的成员变量赋值,要求构造函数中的形参名和成员变量名相同,使用this关键字对成员变量进行调用,并定义输出教师信息方法。测试类中,创建Teacher类对象,并输出教师相关信息。

//Teacher类
public class Teacher{
	private String name;
	private int workTime;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getWorkTime() {
		return workTime;
	}
	public void setWorkTime(int workTime) {
		if(workTime>0)
			this.workTime = workTime;
		else
			System.out.println("输入错误!");
	}
	
	public void xinxi() {
		System.out.println("TeacherName:"+name);
		System.out.println("WorkTime:"+workTime);
	}
}
//测试类
public class TeacherTest {
	public static void main(String[] args) {
		Teacher one = new Teacher();
		one.setName("Jack");
		one.setWorkTime(12);
		one.xinxi();
	}
}

4.设计一个学生类Student,并进行测试,要求如下:
Student类中包含姓名、成绩两个属性。分别给这两个属性定义两个方法,一个方法用于设置值,一个方法用于获取值。
Student类中定义一个无参的构造方法(不执行任何操作)和一个接收两个参数的构造方法,两个参数分别为姓名和成绩属性值。
测试类中创建两个Student对象,一个使用无参构造方法,并用setter方法给姓名和成绩赋值,另一个使用有参的构造方法,在构造方法中给姓名和成绩赋值。

//Student类
public class Student {
	private String name;
	private int grade;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		if(grade>0)
			this.grade = grade;
		else
			System.out.println("输入错误!");
	}
	public Student() {}		//无参构造方法	
	
	public void setter() {
		System.out.println("name:"+name);
		System.out.println("grade:"+grade);
	}
	
	public Student(String name,int grade) {		//有参构造方法	
		this.name = name;
		this.grade = grade;
	}
}
//测试类
public class StudentTest {
	public static void main(String[] args) {
		Student stu1 = new Student();
		stu1.setName("Lili");
		stu1.setGrade(94);
		stu1.setter();
		
		Student stu2 = new Student("Ami",99);
	    System.out.println("name:"+stu2.getName()+"\n"+"grade:"+stu2.getGrade());
	}
}

5.编写一个类Point,代表第一象限内的点(坐标轴上的点除外)。
类Point具有属性:横坐标(x)、纵坐标(y);
若x和y都大于零则输出:点在第一象限内,坐标为:(34,45);
否则输出:点应该在第一象限内,请重新输入!
在测试类中使用无参的构造方法创建Point对象,调用setX和setY方法分别给属性x和y赋值,然后输出点的相关信息。

//Point类
public class Point {
	private int x;
	private int y;
	
	public int getX() {
		return x;
	}
	public void setX(int x) {
		if(x>0)
			this.x = x;
		else
			System.out.println("点应该在第一象限内,请重新输入!");
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		if(y>0)
			this.y = y;
		else
			System.out.println("点应该在第一象限内,请重新输入!");
	}
	public Point() {}
	public void set() {
		System.out.println("("+x+","+y+")");
	}
}
//测试类
public class PointTest {
	public static void main(String[] args) {
		Point p = new Point();
		p.setX(18);
		p.setY(75);
		p.set();
	}
}

6.编写一个类Person,类Person包含
属性:
私有实例变量name(姓名)、类变量count(人数);
方法:
构造方法public person( ): 仅自增count;
构造方法public person(String name):自增count并为name赋值;
方法public String getName( ):获取私有属性name的值;
方法public void print( ):输出Person类实例化的对象是第几个人,若name为空,则默认为“无名氏”。

//Person类
public class Person {
	private String name;
	static int count=0;
	public int person() {
		return count++;
	}
	public Person(String name) {
		count++;
		this.name=name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		if(name==null)
			this.name = "无名氏";
		else
			this.name = name;
	}
	public void print( ) {
		System.out.println("第"+count+"个人,姓名为"+name);
	}
}
//测试类
public class PersonTest {
	public static void main(String[] args) {
		Person p1 = new Person("苏三");
		p1.print();
		Person p2 = new Person("清雅");
		p2.print();
		Person p3 = new Person("素衣");
		p3.print();
		Person p4 = new Person("白染");
		p4.print();
	}
}
八、继承

关键字:extends
知识点:super | this | final

1.设计一个学生类Student和它的一个子类Undergraduate,要求如下:
Student类有name和age两个属性,一个包含两个参数的构造方法,用于给name和age赋值,一个show()方法打印Student的属性信息。
本科生类Undergraduate增加一个degree属性。有一个包含三个参数的构造方法,前两个参数用于给继承的name和age属性赋值,第三个参数给degree专业赋值,一个show()方法用于打印Undergraduate的属性信息。
测试类中分别创建Student对象和Undergraduate对象并调用它们的show()方法。

//父类Student
public class Student {
	String name;
	int age;
	public Student() {}
	public Student(String name,int age) {
		this.name = name;
		this.age = age;
	}
	public void show() {
		System.out.println("name:"+name+"\n"+"age:"+age);
	}
}
//子类Undergraduate 继承 父类Student
public class Undergraduate extends Student{
	String degree;
	public Undergraduate() {}
	public Undergraduate(String name,int age,String degree) {
		this.name = name;
		this.age = age;
		this.degree = degree;
	}
	public void show() {
	System.out.println("name:"+name+"\n"+"age:"+age+"\n"+"degree:"+degree);
	}
}
//测试类
public class UndergraduateTest {
	public static void main(String[] args) {
		Student s1 = new Student();
		Undergraduate s2 = new Undergraduate();
		s1.name = "Li";
		s1.age = 18;
		s1.show();

		s2.name = "Dacy";
		s2.age = 19;
		s2.degree = "邯郸学院";
		s2.show();
	}
}

2.交通工具的类继承
父类Vehicles
属性:名称,颜色,座位;方法:showDetail( )显示名称,颜色,座位
子类Car
调用Vehicles类(父类)方法showDetail( )显示名称,颜色,座位
调用Car类方法show( )输出小汽车的独特行为(如:“不能拉货用”等)

//父类Vehicles
public class Vehicles {
	String name;
	String color;
	int seat;	
	public Vehicles() {}
	public void showDetail(String name,String color,int seat) {
		System.out.println("名称:"+name+"   颜色:"+color+"  座位:"+seat);
	}
}
//子类Car 继承 父类Vehicles
public class Car extends Vehicles{
	String act;
	public Car() {
		act = "不能拉货";
	}
	public void show() {
		System.out.println("独特行为:"+act);
	}
}
//测试类
public class VehiclesTest {
	public static void main(String[] args) {
		Car car = new Car();
		car.act = "只能带人";
		car.showDetail("长安马自达", "red", 4);
		car.show();
	}
}

3.开发教师类,其中教师分为Java教师以及.NET教师,各自的要求如下:
Java教师
属性:姓名、专业方向等字段;
方法:授课(步骤:打开Eclipse、实施理论课授课)、自我介绍
.NET教师
属性:姓名、专业方向
方法:授课(步骤:打开Visual studio 2005、实施理论课授课)、自我介绍

//父类Teacher
public class Teacher {
	String name;
	String major;
	public void introduce() {
		System.out.println("自我介绍:大家好!我是"+name+",今后会教"+major+",很高兴认识你们!");
	}
}

//子类Java 继承 父类Teacher
public class Java extends Teacher{
	public Java() {}
	public Java(String name) {
		this.name = name;
		major = "JAVA";
	}
	public void teach() {
		System.out.println("授课步骤:");
		System.out.println("1.打开Eclipse");
		System.out.println("2.实施理论课授课");
	}
}
//子类NET 继承 父类Teacher
public class NET extends Teacher{
	public NET() {}
	public NET(String name) {
		this.name = name;
		major = ".NET";
	}
	public void teach() {
		System.out.println("授课步骤:");
		System.out.println("1.打开Visual studio 2005");
		System.out.println("2.实施理论课授课");
	}
}
//测试类
public class TeacherTest {
	public static void main(String[] args) {
		Java teacher1 = new Java("Lin");
		teacher1.introduce();
		teacher1.teach();
		System.out.println();
		NET teacher2 = new NET("Lucy");
		teacher2.introduce();
		teacher2.teach();
	}
}

4.假设银行(Bank)按整年year(只能取正整数)计算利息,利息计算公式为:
interest=year0.35savedMoney ,其中savedMoney 为存款
中国建设银行(ConstructionBank)重写了计算利息的方法,整年利息计算方式同银行,不足整年的部分按每天0.0001的利率计算。利用继承、方法重写、super关键字等知识编写程序。

//父类Bank
public class Bank {
	private float savedMoney;
	private int day;
	public float getSaveMoney() {
		return savedMoney;
	}
	public void setSaveMoney(float savedMoney) {
		this.savedMoney = savedMoney;
	}
	public int getDay() {
		return day;
	}
	public void setDay(int day) {
		this.day = day / 365;
	}
	public double money(int year,float savedMoney) {
		return day*0.35*savedMoney;
	}
}
//子类ConstructionBank 继承 父类Bank
public class ConstructionBank extends Bank{
	public double money(int day,float savedMoney) {
		if(day%365==0)
			return day/365*0.35*savedMoney;
		else {
			return day/365*0.35*savedMoney+day%365*0.0001*savedMoney;
		}
	}
}
//测试类
public class ConstructionBankTest {
	public static void main(String[] args) {
		ConstructionBank person1 = new ConstructionBank();
		System.out.println(person1.money(375, 10000));
	}
}

5.定义类A,创建类A的对象,给属性赋值,并输出相应的信息。
类A包括:
圆周率;
final方法speak( ),用来输出“您好!”;
方法getArea( ),用来计算并返回圆面积;

//A类
public class A {
	final double PI = 3.1415;
	private double r;
	
	public double getR() {
		return r;
	}
	public void setR(double r) {
		if(r>0)
			this.r = r;
		else
			System.out.println("数据错误");
	}
	final void speak() {
		System.out.println("您好!");
	}
	public double getArea() {
		double area = r*r*PI;
		return area;
	}
}
//测试类
public class ATest {
	public static void main(String[] args) {
		A a = new A();
		a.setR(2);
		a.speak();
		System.out.println("此圆的面积为:"+a.getArea());
	}
}
  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值