pumpkin-

导航

1903021137—赵舞艳—Java第十一周作业—Java的继承,多态和抽象类

项目                      

内容

课程班级博客链接

19级信计班(本)
这个作业要求链接 Java第十一周作业
博客名称 1903021137—赵舞艳—Java第十一周作业—Java的继承,多态和抽象类
要求 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果)。

 题目1:

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

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

 代码:

父类:
package edu.xj.zwy.week11;
public class Person {
     String name;
        int birthYear;
        public Person(String name,int birthYear ) {
            super();
            this.name = name;
            this.birthYear = birthYear;
        }
        public String getName() {
            return name;
        }
        

        public int birthYear(){
            return birthYear;
        }
            
            }
 1 子类:
 2 package edu.xj.zwy.week11;
 3 
 4 public class Graduate extends Person {
 5     int gpa;
 6     int graguateYear;
 7     int  nowYear;
 8     public Graduate(String name, int birthYear, int gpa, int graguateYear,
 9             int nowYear) {
10         super(name, birthYear);
11         this.gpa = gpa;
12         this.graguateYear = graguateYear;
13         this.nowYear = nowYear;
14     }
15     public int getGpa() {
16         return gpa;
17     }
18     
19     public int getGraguateYear() {
20         return graguateYear;
21     }
22     
23     public int getNowYear() {
24         return nowYear;
25         
26             
27     }
28     public int age(){
29         return nowYear-birthYear;
30         
31     }
32 }
 1 测试类:
 2 package edu.xj.zwy.week11;
 3 
 4 public class Test {
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7         Graduate s=new Graduate("某某",2000,100,2023,2019);
 8          System.out.println("姓名:"+s.name+"\n年龄:"+s.age()+"\n毕业年份:"+s.getGraguateYear()+"\n成绩:"+s.gpa);
 9     }
10 }

  截图:

 

  题目2:

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

  代码:

 

父类:
1
package edu.xj.zwy.week11; 2 3 public class Shape { 4 5 void draw() { 6 7 } 8 9 }

 

 子类:
1
Circle类: 2 package edu.xj.zwy.week11; 3 4 public class Circle extends Shape { 5 6 void draw() { 7 8 System.out.println("Circle.draw()"); 9 } 10 11 } 12 13 Square类: 14 package edu.xj.zwy.week11; 15 16 public class Square extends Shape { 17 void draw(){ 18 19 System.out.println("Square.draw()"); 20 } 21 22 } 23 24 Triangle类: 25 package edu.xj.zwy.week11; 26 27 public class Triangle extends Shape { 28 void draw() { 29 30 System.out.println("Triangle.draw()"); 31 } 32 }
测试类:
1
package edu.xj.zwy.week11; 2 3 public class Test2 { 4 static void doStuff(Shape s){ 5 s.draw(); 6 } 7 8 public static void main(String[] args) { 9 Shape c=new Circle(); 10 Shape s=new Square(); 11 Shape t=new Triangle(); 12 doStuff(c); 13 doStuff(s); 14 doStuff(t); 15 // TODO Auto-generated method stub 16 17 } 18 }

 

  截图:

 

 

  题目3:

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

  • 提示:抽象

  代码:

父类:
package edu.xj.zwy.week11;
public class Animal { void bark() { } }
子类:
Bird类: package edu.xj.zwy.week11;
public class Bird extends Animal { void bark() { System.out.println("小鸟的叫声是啾咪啾咪~"); } } Dog类: package edu.xj.zwy.week11; public class Dog extends Animal { void bark() { System.out.println("小狗的叫声是汪汪汪汪~"); } }
测试类:
package edu.xj.zwy.week11;

public class Test1 {
    public static void main(String[] args) {
        Dog d=new Dog();
        Bird b=new Bird();
        d.bark();
        b.bark();
        // TODO Auto-generated method stub

    }

}

截图:

 

 

  题目4:

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

  • 提示:抽象

 代码:

 

 1 package edu.xj.zwy.week11;
 2 
 3 public abstract class Area {
 4     int width;
 5     int height;
 6     public Area(int width, int height) {
 7         super();
 8         this.width = width;
 9         this.height = height;
10     }
11     public  abstract double area();
12 
13 }

 

 Trigon类:
1
package edu.xj.zwy.week11; 2 3 public class Trigon extends Area { 4 public Trigon(int width, int height) { 5 super(width, height); 6 } 7 8 @Override 9 public double area() { 10 // TODO Auto-generated method stub 11 return width*height; 12 } 13 14 }
Rectangle类:
package edu.xj.zwy.week11;
public class Rectangle extends Area { public Rectangle(int width, int height) { super(width, height); } @Override public double area() { // TODO Auto-generated method stub return width*height; } }
测试类:
package edu.xj.zwy.week11;
public class Test3 { public static void main(String[] args) { Rectangle r=new Rectangle(6,7); System.out.println("长方形的面积为:"+r.area()); Trigon t=new Trigon(3,5); System.out.println("三角形的面积为:"+t.area()); // TODO Auto-generated method stub } }

 

 截图:

 

 

心得体会:

继承的概念: 在已经存在的类的基础上进行扩充和改造,形成一个新的类,满足“is   a”的关系就是继承。

多态的概念 :多态是一种事务,多种形态。

        多态的分类:

                             1.对象的多态(父对象引用指向子类实例)

                             2.方法的多态(分为方法的重载和重写或者覆盖)

                             3.对象的多态  (若在子类中重写了父类的方法,则通过对象的多态调用的是子类中重写的方法)

        方法的重载:重载是发生在同一类中,函数的名字相同,但是函数的参数个数,和参数类型,只要不一样,就是重载。 

        函数重写:

                        1.重写发生在两个类中,父类的方法,在子类中重新写。

                        2.重写的函数名字和参数列表完全一样。

                        3.重写的函数只能抛出比之前更小的异常,访问权限只能比之前的更大。

                        4.前面讲的对象的多态里面,父类对象指向子类实例,只能调用父类和子类中相同的方法,子类中新添加的方法并不能调用,若要调用就要有强制类型转换。

 

posted on 2022-05-14 20:41  pumpkin-  阅读(14)  评论(0编辑  收藏  举报