1903021121-刘明伟-java十一周作业-java面向对象编程


项目 内容
课程班级博客链接 19级信计班(本)
作业要求链接 第十一周作业
博客名称 1903021121-刘明伟-java十一周作业-java面向对象
要求 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果)。

扩展阅读都是对大家现阶段学习有用的知识,要求必读,并写一段学习心得。

继承、多态和抽象类是java语言的主要特点,要求仔细阅读,并写针对扩展阅读写学习心得,理解后完成两个练习。


题目1:

  • 类Person定义了姓名name,出生年份birthYear,其子类Graduate在继承父类的基础上新增定义了成绩gpa、毕业年份graduateYear。编写测试类,输出毕业生的姓名、年龄、毕业年份、成绩。

  • 提示:父类要有构造方法,子类通过super调用父类构造方法。
  • 代码:

1.Person类

package xj.lmw;  import java.util.*;  public class Person {  // 定义 Person类 	 	Calendar calendar = Calendar.getInstance(); 	 	String name; 	int birthYear; 	 	public Person(String name, int birthYear) { 		super(); 		this.name = name; 		this.birthYear = birthYear; 	} 	 	public String getMessage() { 		int year = calendar.get(Calendar.YEAR);          	return "姓名:" +name+"n年龄:"+(year-birthYear);          }  }

2.子类Graduate

package xj.lmw;  public class Graduate extends Person { 	int gpa; 	int graduateYear;  	public Graduate(String name, int birthYear,int gpa, int graduateYear) { 		super(name, birthYear); 		// TODO Auto-generated constructor stub 		this.gpa = gpa; 		this.graduateYear = graduateYear; 	} 	 	 public String getMessage() {		  		 return super.getMessage()+"n毕业年份:"+graduateYear+"n成绩:"+gpa; 		      }  }

3.测试类Test

package xj.lmw;  public class Test {  	public static void main(String[] args) { 		// TODO Auto-generated method stub 		Graduate g = new Graduate("李四",2000,100,2023); 		System.out.println(g.getMessage()); 	}  }
  • 运行截图:

1903021121-刘明伟-java十一周作业-java面向对象编程


 

1903021121-刘明伟-java十一周作业-java面向对象编程题目2:

  • 定义一个基本类Shape,有一个draw方法,定义三个类Circle(圆)、Triangle(三角形)、Square(正方形)都继承于Shape。在测试类中定义一个方法doStuff,传入基本类shape为参数,并调用draw方法。使用父类Shape创建三个类Circle、 Triangle、Square的实例对象并分别作为参数传入draw方法中。
  • 提示:多态
  • 代码:

1.基本类Shap代码

package xj.lmw02;  public class Shap {  // 定义类Shap 	void draw() { // draw 方法 		System.out.println(); 	}  }

2.Circle(圆)类代码

package xj.lmw02;  public class Circle extends Shape {  //  Circle 类继承 Shape 类 	void draw() { 		System.out.println("调用deaw方法"); 	}  	public Circle() { 		// TODO Auto-generated constructor stub 	}  }

3.Triangle(三角形)类代码

package xj.lmw02;  public class Triangle extends Shape { 	void draw() { 		System.out.println("Triangle的draw方法被调用执行了"); 	}  	public Triangle() { 		// TODO Auto-generated constructor stub 	}  }

4.Square(正方形)代码

package xj.lmw02;  public class Square extends Shape { 	void draw() { 		System.out.println("Square的draw方法被调用执行了"); 	}  	public Square() { 		// TODO Auto-generated constructor stub 	}  }

5.测试类Test2代码

package xj.lmw02;  import java.util.*;  public class Test2 { 	static void doStuff(Shape s) { 		s.draw(); 	} 	 	static void drawShape(Shape[] ss) { 		for (int i = 0; i < ss.length; i ++) { 			ss[i].draw(); 		} 		 	} 	 	public static void main(String[] args) { 		// TODO Auto-generated method stub 		Random rand = new Random(); 		Shape[] s = new Shape[6]; 		for(int i=0;i<s.length;i++) { 			switch(rand.nextInt(3)) { 			case 0:s[i]=new Circle();break; 			case 1:s[i]=new Triangle();break; 			case 2:s[i]=new Square();break; 			} 			 		} 		drawShape(s); 	} 		 }
  • 截图:

1903021121-刘明伟-java十一周作业-java面向对象编程


 

1903021121-刘明伟-java十一周作业-java面向对象编程题目3:

  • 所有的动物都有一个父类Animal,再定义两个子类Bird(鸟)和Dog(狗)继承自Animal,并实现父类中的bark(叫唤)方法。

  • 提示:抽象
  • 代码:

1.Animal类

package xj.lme03;  public abstract class Animal {  // 定义抽象类Animal 	abstract void bark();  // 定义bark(叫唤)方法  }

2.Bild类

package xj.lme03;  public class Bird extends Animal {  // Bird 类继承 Animal 类  	public Bird() { 		// TODO Auto-generated constructor stub 	}  	@Override 	void bark() { 		// TODO Auto-generated method stub 		System.out.println("小鸟叫了");  	}  }

3.Dog类

package xj.lme03;  public class Dog extends Animal {  	public Dog() { 		// TODO Auto-generated constructor stub 	}  	@Override 	void bark() { 		// TODO Auto-generated method stub 		System.out.println("小狗叫了");  	}  }

4.测试类Test3

package xj.lme03;  public class Test3 {  	public static void main(String[] args) { 		// TODO Auto-generated method stub 		 		Animal b = new Bird(); 		Animal d = new Dog(); 		b.bark(); 		d.bark();  	}  }
  • 截图:

1903021121-刘明伟-java十一周作业-java面向对象编程


 

1903021121-刘明伟-java十一周作业-java面向对象编程题目4:

  • 不同几何图形的面积计算公式是不一样的,可是,它们具有的特性是一样的,都具有长和宽这两个属性,也都具有面积计算的方法。根据抽象的概念计算长方形的面积和三角形的面积。

  • 提示:抽象
  • 代码:

1.定义抽象类

package xj.lmw04;  public abstract class Calc { // 定义抽象类Calc 	 	abstract void getArea();  // 定义 求面积的抽象方法  }

2.定义长方形类

package xj.lmw04;  public class Rectangle extends Calc { 	double length; 	double width;  	public Rectangle(double length, double width) { 		super(); 		this.length = length; 		this.width = width; 	}  	@Override 	void getArea() { 		// TODO Auto-generated method stub 		System.out.println("长方形的面积为:"+length*width);  	}  }

3.定义三角形类

package xj.lmw04;  public class Triangle extends Calc { 	double length; 	double width; 	  	public Triangle(double length, double width) { 		super(); 		this.length = length; 		this.width = width; 	}  	@Override 	void getArea() { 		// TODO Auto-generated method stub 		System.out.println("三角形的面积是:"+0.5*width*length);  	}  }

4.抽象类

package xj.lmw04;  public class Test4 {  	public static void main(String[] args) { 		// TODO Auto-generated method stub 		Calc r = new Rectangle(2,2); 		r.getArea(); 		Calc t = new Triangle(2,2); 		t.getArea();  	}  }
  • 截图:

1903021121-刘明伟-java十一周作业-java面向对象编程


心得:

面向对象编程
使用继承
继承:
  总有很多对象是具有很多相同的点的,所有没有必要在定义一个类的时候就去重新写一次,继承就是将相同的部分提出来,只写一遍,下次想用的时候就可以直接使用,相当于公共部分。

Class 子类 extends 父类{}

实现继承:
  一个子类只能有一个父类,但是可以多重继承,比如父亲有了儿子,儿子也可以有孙子,相当于孙子间接性继承父亲,可以理解为隔代遗传。

成员的覆盖
  成员覆盖:子类中的函数定义和父类相同,最后调用的是子类中的方法,成为覆盖或者重写。
  成员覆盖的作用:不改变源代码的情况下对一个模块的功能进行修改。
使用多态
  多态:父类的引用可以指向子类对象。
  使用多态:
  函数传入的形参可以使父类类型,而实际传入的可以使子类对象。

  函数的返回类型是父类类型,而实际返回的可以是子类对象。

父类和子类对象的类型转换:相互转换。

抽象类和接口
  抽象类:抽象类不能被实例化,抽象函数必须重新写,除非子类也是抽象类,在抽象类中可以含有普通成员函数。
  接口:如果一个抽象类中的所有函数都是抽象的,也可以定义为接口。

发表评论

相关文章