2020年12月9日星期三

Java基础之:OOP——多态练习题

Java基础之:OOP——多态练习题

应用案例1:

编写教师类

要求有属性"姓名name","年龄age","职称post","基本工资salary"

编写业务方法, introduce(),实现输出一个教师的信息。

编写教师类的三个子类:教授类(professor)、副教授类(vice professor)、讲师类(lecturer)。

工资级别分别为:教授为1.3、副教授为1.2、讲师类1.1。在三个子类里面都重写父类的introduce()方法。

定义并初始化一个老师对象,调用业务方法,实现对象基本信息的后台打印。

 

package polymorphic_HomeWork;public class WorkTest_01 {	public static void main(String[] args) {		Teacher professor = new Professor("小范",20,"professor",4000.0);		Teacher viceProfessor = new ViceProfessor("小黄",18,"ViceProfessor",3000.0);		Teacher lecturer = new Lecturer("小雨",19,"lecturer",2000.0);				System.out.println(professor.introduce());		System.out.println(viceProfessor.introduce());		System.out.println(lecturer.introduce());	}}//要求有属性"姓名name","年龄age","职称post","基本工资salary",//编写业务方法, introduce(),实现输出一个教师的信息。class Teacher{		private String name;	private int age;	private String post;	private double salary;	public Teacher(String name, int age, String post, double salary) {		super();		this.name = name;		this.age = age;		this.post = post;		this.salary = salary;	}	public Teacher() {		super();	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public String getPost() {		return post;	}	public void setPost(String post) {		this.post = post;	}	public double getSalary() {		return salary;	}	public void setSalary(double salary) {		this.salary = salary;	}		//introduce(),实现输出一个教师的信息。	public String introduce() {		return "Teacher [name=" + name + ", age=" + age + ", post=" + post ;	}	}//教授类(professor)class Professor extends Teacher{		private double level;	public Professor(String name, int age, String post, double salary) {		super(name, age, post, salary);		this.level = 1.3;	}	public double getLevel() {		return level;	}	public void setLevel(double level) {		this.level = level;	}		@Override	public String introduce() {		// TODO Auto-generated method stub		return "Professor " + super.introduce() + ", salary=" + getSalary()*level + "]";	}}//副教授类(vice professor)class ViceProfessor extends Teacher{		private double level;	public ViceProfessor(String name, int age, String post, double salary) {		super(name, age, post, salary);		this.level = 1.2;	}	public double getLevel() {		return level;	}	public void setLevel(double level) {		this.level = level;	}		@Override	public String introduce() {		// TODO Auto-generated method stub		return "ViceProfessor " + super.introduce() + ", salary=" + getSalary()*level + "]";	}}//讲师类(lecturer)class Lecturer extends Teacher{		private double level;	public Lecturer(String name, int age, String post, double salary) {		super(name, age, post, salary);		this.level = 1.1;	}	public double getLevel() {		return level;	}	public void setLevel(double level) {		this.level = level;	}		@Override	public String introduce() {		// TODO Auto-generated method stub		return "Lecturer " + super.introduce() + ", salary=" + getSalary()*level + "]";	}}

  

应用案例2:

设计父类—员工类。子类:工人类(Worker),农民类(Peasant),教师类(Teacher),科学家类(Scientist),服务生类(Waiter)。

(1) 其中工人,农民,服务生只有基本工资。

(2) 教师除基本工资外,还有课酬(元/天)。

(3) 科学家除基本工资外,还有年终奖(bonus)。

(4) 编写一个测试类,将各种类型的员工的全年工资打印出来。

package polymorphic_HomeWork;public class WorkTest_02 {	public static void main(String[] args) {		Employee worker = new Worker("工人 小范",20,2000);		Employee peasant = new Peasant("农民 小范",40,1000);		Employee waiter = new Waiter("服务生 小范",25,3000);		Employee teacher = new Teacher("老师 小范",30,4000,50,200);		Employee Scientist = new Scientist("科学家 小范",35,3500,250000);		//这里创建的对象的编译类型都是Employee		//		System.out.println(worker.toString()); //		System.out.println(peasant.toString()); //		System.out.println(waiter.toString()); //		System.out.println(teacher.toString()); //		System.out.println(Scientist.toString()); 				WorkTest_02 wt = new WorkTest_02();				wt.showAll(Scientist);		wt.showAll(teacher);		wt.showAll(waiter);		wt.showAll(peasant);		wt.showAll(worker);	}			public void showAll(Employee e) {	//当有对象传入时,它的编译类型就变为了Employee。		//由于子类重写了父类的show方法,而这里e的运行类型是动态绑定了的。		//所以会自动的寻找到传入类型所对应的show方法		//父类的show方法,相当于让编译器可以通过编译。如果父类中没有show方法会报语法错误。		//因为e的编译类型为Employee.		e.show();	}}class Employee{	private String name;	private int age;	private double salary;		public Employee(String name, int age, double salary) {		super();		this.name = name;		this.age = age;		this.salary = salary;	}	public Employee() {		super();	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}	public double getSalary() {		return salary;	}	public void setSalary(double salary) {		this.salary = salary;	}	public void show() {			System.out.println(toString());	}				@Override	public String toString() {		return "name=" + name + ", age=" + age;	}	//提供一个方法返回基本年薪,子类可以在此基础上进行修改	public double yearSalary() {				return salary * 12;	}	}//工人类(Worker)class Worker extends Employee{		public Worker(String name, int age, double salary){		super(name,age,salary);	}		@Override	public void show() {		System.out.println("Worker : " + super.toString() + ", salary: " + yearSalary()); 	}}//农民类(peasant)class Peasant extends Employee{		public Peasant(String name, int age, double salary){		super(name,age,salary);	}		@Override	public void show() {		System.out.println("Peasant : " + super.toString() + ", salary: " + yearSalary());	}}//服务生类(waiter)class Waiter extends Employee{		public Waiter(String name, int age, double salary){		super(name,age,salary);	}		@Override	public void show() {		System.out.println("Waiter : " + super.toString() + ", salary: " + yearSalary());	}}//教师类(teacher),教师除基本工资外,还有课酬(元/天)。class Teacher extends Employee{		private double dollars;	//课酬	private int workDays;	//工作天数		public Teacher(String name, int age, double salary, double dollars, int workDays) {		super(name, age, salary);		this.dollars = dollars;		this.workDays = workDays;	}			public int getWorkDays() {		return workDays;	}	public void setWorkDays(int workDays) {		this.workDays = workDays;	}	public double getDollars() {		return dollars;	}	public void setDollars(double dollars) {		this.dollars = dollars;	}	@Override	public void show() {			System.out.println( "Teacher : " + super.toString() + 				", salary: " + (yearSalary()+dollars*workDays));	} 	}//科学家类(scientist),	科学家除基本工资外,还有年终奖(bonus)。class Scientist extends Employee{		private double bonus;	public Scientist(String name, int age, double salary, double bonus) {		super(name, age, salary);		this.bonus = bonus;	}	public double getBonus() {		return bonus;	}	public void setBonus(double bonus) {		this.bonus = bonus;	}		@Override	public void show() {				System.out.println("Scientist : " + super.toString() + 				",salary:" + (yearSalary()+bonus)); 	}}

  

 

应用案例3:

定义一个图形类Picture,再定义Picture的两个子类:圆形类Circle、矩形类Rect。 要求: 图像类:有求周长和求面积和显示图形信息的功能。 圆形类:包含圆心和半径,重写求周长和求面积的方法。 矩形类:包含长和宽,重写求周长和求面积的方法。

package polymorphic_HomeWork;public class WorkTest_03 {	public static void main(String[] args) {		Picture circle = new Circle("2,2",3.1);		Picture rect = new Rect(6.4,5.3);				circle.show();		rect.show();	}}//图像类:有求周长和求面积和显示图形信息的功能。class Picture{		private double sideLength;	//边长	private int sideCount;	//边数	public Picture(double sideLength, int sideCount) {		super();		this.sideLength = sideLength;		this.sideCount = sideCount;	}	public Picture() {		super();	}	public double getSideLength() {		return sideLength;	}	public void setSideLength(double sideLength) {		this.sideLength = sideLength;	}	public int getSideCount() {		return sideCount;	}	public void setSideCount(int sideCount) {		this.sideCount = sideCount;	}		public double perimeter(){	//求周长		return sideCount * sideLength;	}		public double area() {	//求面积				return 0.0;	}		public void show() {				System.out.printf("周长(perimeter):%.2f\t面积(area):%.2f\n",perimeter(),area());	}}//圆形类Circle:包含圆心和半径,重写求周长和求面积的方法。class Circle extends Picture{	private String centerCircle; //圆心:"X,Y" 	private double radius;	//半径		public Circle(String centerCircle, double radius) {		super();		this.centerCircle = centerCircle;		this.radius = radius;	}	public String getCenterCircle() {		return centerCircle;	}	public void setCenterCircle(String centerCircle) {		this.centerCircle = centerCircle;	}	public double getRadius() {		return radius;	}	public void setRadius(double radius) {		this.radius = radius;	}		@Override	public double perimeter(){	//求周长		return 2 * radius * Math.PI;	}		@Override	public double area() {	//求面积		return radius * radius * Math.PI;	}		@Override	public void show() {		System.out.printf("Circle:圆心为 :%S ",centerCircle);		super.show();	}}//矩形类Rect:包含长和宽,重写求周长和求面积的方法。class Rect extends Picture{	private double length;//长	private double wide;//宽	public Rect( double length, double wide) {		super();		this.length = length;		this.wide = wide;	}	public double getLength() {		return length;	}	public void setLength(double length) {		this.length = length;	}	public double getWide() {		return wide;	}	public void setWide(double wide) {		this.wide = wide;	}		@Override	public double perimeter(){	//求周长		return 2 * length + 2 * wide;	}		@Override	public double area() {	//求面积		return length * wide;	}		@Override	public void show() {		System.out.print("Rect: ");		super.show();	}}

  

  

 









原文转载:http://www.shaoqun.com/a/497400.html

转口贸易:https://www.ikjzd.com/w/1427

声网:https://www.ikjzd.com/w/2176

FEN:https://www.ikjzd.com/w/2668


Java基础之:OOP——多态练习题应用案例1:编写教师类要求有属性"姓名name","年龄age","职称post","基本工资salary"编写业务方法,introduce(),实现输出一个教师的信息。编写教师类的三个子类:教授类(professor)、副教授类(viceprofessor)、讲师类(lecturer)。工资级别分别为:教授为1.3、副教授为1.2、讲师类1.1。在三个子类里面
upc:upc
亿恩网:亿恩网
五一东莞去哪里玩?东莞五一好玩的地方?:五一东莞去哪里玩?东莞五一好玩的地方?
上海迪士尼旅游菜单攻略:上海迪士尼旅游菜单攻略
温哥华滑雪 :温哥华滑雪

没有评论:

发表评论