1903021118—角关丽—Java第十一周作业—类和抽象类的学习

项目 内容
课程班级博客链接  19信计班
这个作业要求链接 第十一周作业
博客名称 1903021118—角关丽—Java第十一周作业—类和抽象类的学习
要求 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果)。

题目1:

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

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

代码:

package xi.jgl;

public class Calendar {

}





package xi.jgl; import java.util.Calendar;// public class Person { Calendar calendar = Calendar.getInstance();//实例化对象 private String name ; private static int birthYear ; private static int Year; 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); } private static int get(int birthYear2) { // TODO Auto-generated method stub return 0; } public String getGap() { // TODO Auto-generated method stub return null; } }









package xi.jgl; 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; } // TODO Auto-generated constructor stub public String getMessage() { return super.getMessage()+"\n毕业年份:"+graduateYear+"\n成绩:"+gpa; } }





package xi.jgl; public class Test { public Test() { // TODO Auto-generated constructor stub } public static void main(String[] args) { // TODO Auto-generated method stub Graduate g = new Graduate("橘子",2021,2,2022); System.out.println(g.getMessage()); }

 

截图:

 

 

 

 

题目2:

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

代码:

package xj.jgl;

public class Shape {

     void draw() {
                     System.out.println();
    }

}





package xj.jgl; public class Circle extends Shape { void draw() { System.out.println("Calling Circle.draw()"); } public Circle() { // TODO Auto-generated constructor stub } }



package xj.jgl; public class Triangle1 extends Shape { void draw() { System.out.println("Calling Triangle.draw()"); } public Triangle1() { // TODO Auto-generated constructor stub } }






package xj.jgl; public class Square extends Shape { void draw() { System.out.println("Calling Square.draw()"); } public Square() { // TODO Auto-generated constructor stub } }



package xj.jgl; import java.util.Random; public class Tese0 { // TODO Auto-generated constructor stub static void doStuff(Shape s) { s.draw(); } static void drawShapes(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 Triangle1();break; case 2:s[i]=new Square();break; } } drawShapes(s); } }

 

 

截图:

 

 

 

题目3:

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

  • 提示:抽象

 

代码:

package xi.jgl;

public abstract class Animal {
abstract void bark();
}





package xj.jgl; public class Bird extends Animal { void bark() { // TODO Auto-generated method stub System.out.println("小鸟喳喳叫"); } }




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




package xj.jgl; public class Test1{ public static void main(String[] args) { // TODO Auto-generated method stub Animal a1 = new Bird(); Animal a2 = new Dog(); a1.bark(); a2.bark(); } }

 

 

截图:

 

 

 

题目4:

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

  • 提示:抽象

 

代码:

package xi.jgl;

public abstract class Area{
    public int height;
    public int width;
     public Area (int width, int height) {
            super();
             this.height = height;
            this.width = width;
         }
    {
    // TODO Auto-generated constructor stub

    
    
        
    }
    public abstract double area();

}






package xi.jgl; public class Rectangle extends Area { public Rectangle(int width, int height) { super(width, height); // TODO Auto-generated constructor stub } public double area() { // TODO Auto-generated method stub return width*height; } }




package xi.jgl; public class Triangle extends Area { public Triangle(int width, int height) { super(width, height); // TODO Auto-generated constructor stub } public double area() { // TODO Auto-generated method stub return(width*height)/2; }





public class Test111 { public static void main(String[] args) { // TODO Auto-generated method stub Rectangle s=new Rectangle(7,5); System.out.println("长方形的面积为:"+s.area()); Triangle t=new Triangle(7,5); System.out.println("三角形的面积为:"+t.area()); } }

 

截图:

 

 

 

 

心得体会:

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

2、多态的概念:多态是一种事务,多种形态。用名字一样的代码根据要求的不同,干不一样的事情。

分类

(1):对象的多态。父对象引用指向子类实例,若在子类中重写了父类的方法,则通过对象的多态调用的是子类中重写的方法。

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

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

重写:发生在两个类中,父类的方法,在子类中重新写。 重写的函数名字和参数列表完全一样,重写的函数只能抛出比之前更小的异常,访问权限只能比之前的更大。

3、抽象类:

类:用来描述具有共同性质的一组事物的自定义复合数据类型

类:class关键字创建

抽象类:   通过abstract 修饰的java类就是。

posted @ 2022-05-13 20:14  橘~子  阅读(15)  评论(0编辑  收藏  举报