1903021116—吉琛—Java第十一周作业—类的继承
项目 | 内容 |
课程班级博客链接 | 19信计班 |
这个作业要求链接 | 第十一周作业 |
博客名称 | 学号—姓名—Java第十一周作业—题目自拟 |
要求 | 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果)。 |
题目1:
-
类Person定义了姓名name,出生年份birthYear,其子类Graduate在继承父类的基础上新增定义了成绩gpa、毕业年份graduateYear。编写测试类,输出毕业生的姓名、年龄、毕业年份、成绩。
- 提示:父类要有构造方法,子类通过super调用父类构造方法。
代码:
1 package tex11.xjb.jc; 2import java.util.Calendar; import java.util.Date;
3 public class Person {
Calendar calendar = Calendar.getInstance();
4 String name ; 5 int birthYear ; 6 public Person(String name, int birthYear) { 7 super(); 8 this.name = name; 9 this.birthYear = birthYear; 10 } 11 public String getMessage() {
int year = calendar.get(Calendar.YEAR); 12 return "姓名:" +name+"\n年龄:"+(year-birthYear); 13 } 14 } 15 子类: 16 package tex11.xjb.jc; 17 18 public class Graduate extends Person { 19 int gpa; 20 int graduateYear; 21 public Graduate(String name, int birthYear,int gpa, int graduateYear) { 22 super(name, birthYear); 23 // TODO Auto-generated constructor stub 24 this.gpa = gpa; 25 this.graduateYear = graduateYear; 26 } 27 public String getMessage() { 28 return super.getMessage()+"\n毕业年份:"+graduateYear+"\n成绩:"+gpa; 29 } 30 31 } 32 测试类: 33 package tex11.xjb.jc; 34 35 public class Test1 { 36 37 public static void main(String[] args) { 38 // TODO Auto-generated method stub 39 Graduate g = new Graduate("张三",1999,99,2023); 40 System.out.println(g.getMessage()); 41 } 42 43 }
运行截图:
题目2:
- 定义一个基本类Shape,有一个draw方法,定义三个类Circle(圆)、Triangle(三角形)、Square(正方形)都继承于Shape。在测试类中定义一个方法doStuff,传入基本类shape为参数,并调用draw方法。使用父类Shape创建三个类Circle、 Triangle、Square的实例对象并分别作为参数传入draw方法中。
- 提示:多态
代码:
1 package tex11.xjb.jc; 2 3 public class Shape {//定义基本类 4 void draw() { 5 System.out.println(); 6 } 7 } 8 9 定义Circle类: 10 11 package tex11.xjb.jc; 12 13 public class Circle extends Shape { 14 void draw() { 15 System.out.println("Calling Circle.draw()"); 16 } 17 18 public Circle() { 19 // TODO Auto-generated constructor stub 20 } 21 22 } 23 24 定义Triangle类: 25 26 package tex11.xjb.jc; 27 28 public class Triangle extends Shape { 29 void draw() { 30 System.out.println("Calling Triangle.draw()"); 31 } 32 public Triangle() { 33 // TODO Auto-generated constructor stub 34 } 35 36 } 37 38 定义Square类: 39 40 package tex11.xjb.jc; 41 42 public class Square extends Shape { 43 void draw() { 44 System.out.println("Calling Square.draw()"); 45 } 46 public Square() { 47 // TODO Auto-generated constructor stub 48 } 49 50 } 51 52 测试类: 53 54 package tex11.xjb.jc; 55 56 import java.util.Random; 57 58 public class Test2 { 59 static void doStuff(Shape s) { 60 s.draw(); 61 } 62 static void drawShapes(Shape[] ss) { 63 for(int i=0;i<ss.length;i++) { 64 ss[i].draw(); 65 } 66 } 67 public static void main(String[] args) { 68 // TODO Auto-generated method stub 69 Random rand = new Random(); 70 Shape[] s = new Shape[6]; 71 for(int i=0;i<s.length;i++) { 72 switch(rand.nextInt(3)) { 73 case 0:s[i]=new Circle();break; 74 case 1:s[i]=new Triangle();break; 75 case 2:s[i]=new Square();break; 76 } 77 } 78 drawShapes(s); 79 } 80 81 }
运行截图:
题目3:
-
所有的动物都有一个父类Animal,再定义两个子类Bird(鸟)和Dog(狗)继承自Animal,并实现父类中的bark(叫唤)方法。
- 提示:抽象
代码:
1 package tex11.xjb.jc; 2 3 public abstract class Animal { 4 abstract void bark(); 5 6 } 7 8 定义Bird类: 9 10 package tex11.xjb.jc; 11 12 public class Bird extends Animal { 13 14 void bark() { 15 // TODO Auto-generated method stub 16 System.out.println("小鸟叽叽喳喳的叫"); 17 } 18 19 } 20 21 定义Dog类: 22 23 package tex11.xjb.jc; 24 25 public class Dog extends Animal { 26 27 void bark() { 28 // TODO Auto-generated method stub 29 System.out.println("小狗汪汪汪的叫"); 30 } 31 32 } 33 34 测试类: 35 36 package tex11.xjb.jc; 37 38 public class Test3 { 39 40 public static void main(String[] args) { 41 // TODO Auto-generated method stub 42 Animal a1 = new Bird(); 43 Animal a2 = new Dog(); 44 a1.bark(); 45 a2.bark(); 46 } 47 48 }
运行截图:
题目4:
-
不同几何图形的面积计算公式是不一样的,可是,它们具有的特性是一样的,都具有长和宽这两个属性,也都具有面积计算的方法。根据抽象的概念计算长方形的面积和三角形的面积。
- 提示:抽象
代码:
1 package tex11.xjb.jc; 2 3 public abstract class Area {//定义抽象类 4 5 abstract void getArea(); 6 } 7 8 定义长方形类: 9 10 package tex11.xjb.jc; 11 12 public class Rectangle extends Area { 13 double length; 14 double width; 15 public Rectangle(double length, double width) { 16 super(); 17 this.length = length; 18 this.width = width; 19 } 20 21 void getArea() { 22 // TODO Auto-generated method stub 23 System.out.println("长方形的面积是:"+length*width); 24 } 25 26 } 27 28 定义三角形类: 29 30 package tex11.xjb.jc; 31 32 public class Triangle1 extends Area { 33 double length; 34 double width; 35 public Triangle1(double length, double width) { 36 super(); 37 this.length = length; 38 this.width = width; 39 } 40 41 void getArea() { 42 // TODO Auto-generated method stub 43 System.out.println("三角形的面积是:"+0.5*length*width); 44 } 45 46 } 47 48 测试类: 49 50 package tex11.xjb.jc; 51 52 public class Test4 { 53 54 public static void main(String[] args) { 55 // TODO Auto-generated method stub 56 Area a = new Rectangle(5,2); 57 a.getArea(); 58 Triangle1 t = new Triangle1(6,8); 59 t.getArea(); 60 } 61 62 }
运行截图:
扩展阅读心得:
1、继承的概念:在已经存在的类的基础上进行扩充和改造,形成一个新的类。满足“is a”的关系就是继承。
2、多态的概念:多态是一种事务,多种形态。用名字一样的代码根据要求的不同,干不一样的事情。
分类:
(1)对象的多态。(父对象引用指向子类实例)
(2)方法的多态。(分为方法的重载和重写或者覆盖)
3、方法的重载:重载是发生在同一类中,函数的名字相同,但是函数的参数个数,和参数类型,只要不一样,就是重载。
4、函数重写:
(1) 重写发生在两个类中,父类的方法,在子类中重新写。
(2) 重写的函数名字和参数列表完全一样。
(3) 重写的函数只能抛出比之前更小的异常。访问权限只能比之前的更大。
(4) 重写的函数前加@Override 标示。
5、不是所有的类型都可以相互转换的!只有继承关系的对象之间才可以相互转换。
6、认识抽象类以及它的组成元素。
7、抽象类的具体用法:
(1) 抽象类不能new,借助子类访问抽象类中的实例元素。
(2) 普通的java类继承了抽象类,就需要重写抽象类中的所有抽象方法,否则将这个普通的java类改成抽象类。
(3) 抽象类可以继承其他的抽象类,可以不用重写抽象方法。
(4) 利用上转型对象创建出抽象类对象
(5) 抽象类对象可以访问抽象类中的实例变量、类变量、构造方法、实例方法、类方法、【抽象方法实际上是子类重写以后的方法】。
(6) 当某一个普通的java类中的方法参数是抽象类类型的时候,可以传递上转型对象,也可以是抽象类的子类对象。