第四次实验及动手动脑

继承与多态
1、
继承条件下的构造方法调用:
源代码如下:
class Grandparent 
{
    public Grandparent()
     {
        System.out.println("GrandParent Created.");
     }
    public Grandparent(String string) 
    {
            System.out.println("GrandParent Created.String:" + string);
    }
}
class Parent extends Grandparent
{
    public Parent()
    {
        //super("Hello.Grandparent.");
        System.out.println("Parent Created");    
        //super("Hello.Grandparent.");
      }
}
class Child extends Parent 
{
    public Child()
     {    
        System.out.println("Child Created");
     }
}
public class dsdn 
{
    public static void main(String args[])
     {
            Child c = new Child();    
     }
}
经过测试可得出结论:
通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。





2、
在子类中,若要调用父类中被覆盖的方法,可以使用super关键字。
代码如下:
public class dsdn{
    public static void main(String[] args) {
        B b=new B();
        b.b();
    }
}

class A{
    public int a() {
        System.out.println("我是父类");
        return 0;
    }
}

class B extends A{
    public int a() {
        System.out.println("我是子类");
        return 0;
    } 
    public int b() {
        a();
        super.a();
        return 0;
    }
}

测试成功;



课后实验
一、面积计算。
1、设计思路:
即每一个类重载一下父类的方法,至于方法的定义即是简单的对应图形的面积计算。最后通过countArea(Shape s)方法调用一下对应对象的对应方法即可。
2、源代码:
//信1705-2    20173629   何伟豪  
import java.util.Scanner;
public class TestShape {
    static double countArea(Shape s) {
        double area;
        area=s.getArea();
        return area;
    }
    
    public static void main(String[] args) {
        //Scanner input=new Scanner(System.in);
        Yuanxing s1=new Yuanxing();
        Juxing s2=new Juxing();
        Sanjiaoxing s3=new Sanjiaoxing();
        Tixing s4=new Tixing();
        double sum =countArea(s1) + countArea(s2) + countArea(s3) + countArea(s4);
        System.out.println("总面积为" + sum);
    }
}


class Shape{
    public double getArea() {
        return 0;
    }
}

class Yuanxing extends Shape{
    public double getArea() {
        Scanner input=new Scanner(System.in);
        System.out.print("请输入圆形的半径:");
        double r=input.nextInt();
        double S=r*r*3.14;
        return S;
    }
}

class Juxing extends Shape{
    public double getArea() {
        Scanner input=new Scanner(System.in);
        System.out.print("请输入矩形的宽和长:");
        double c=input.nextInt();
        double k=input.nextInt();
        double S =c*k;
        return S;
    }
}

class Sanjiaoxing extends Shape{
    public double getArea(){
        Scanner input=new Scanner(System.in);
        System.out.print("请输入三角形的底和高:");
        double d=input.nextInt();
        double h=input.nextInt();
        double S=(d*h)/2;
        return S;
    }
}


class Tixing extends Shape{
    public double getArea(){
        Scanner input=new Scanner(System.in);
        System.out.print("请输入梯形的上底、下底和高:");
        double sd=input.nextInt();
        double xd=input.nextInt();
        double h=input.nextInt();
        double S=((sd+xd)*h)/2;
        input.close();
        return S;
    }
}

3、运行截图:

4、错误分析:
误将final和static搞混。


二、抽象类和接口的设计
1、设计思路:
根据课件指导一个一个完成的每一个函数。
2、源代码:
//信1705-2  20173629  何伟豪
package choujie;

import java.util.Scanner;
import java.lang.Math;

public class ChouJie {
    public static void main(String[] args) {
        Rectangle s1 = new Rectangle();
        Square s2 = new Square();
        Circle s3 = new Circle();
        Square2 s21 = new Square2();
        s1.showArea();
        s2.showArea();
        s3.showArea();
        System.out.println("********************************************");
        System.out.println("以上为实验二的第一部分,以下为实验二的第二部分");
        System.out.println("********************************************");
        s21.xianshi();
    }

}

abstract class Shape{
    public abstract void showArea();
}
class Rectangle extends Shape{
    Scanner input=new Scanner(System.in);
    public void showArea() {
        System.out.println("请输入矩形的长和宽:");
        double c=input.nextInt();
        double k=input.nextInt();
        double S=c*k;
        System.out.println("矩形的面积为:" + S);
    }//矩形相关数据的输入输出
}//矩形类 
class Square extends Shape{
    Scanner input=new Scanner(System.in);
    public void showArea() {
        System.out.println("请输入正方形的边长:");
        double x=input.nextInt();
        double S=x*x;
        System.out.println("正方形的面积为:" + S);
    }//正方形相关数据的输入输出
}//正方形类
class Circle extends Shape{
    Scanner input=new Scanner(System.in);
    public void showArea() {
        System.out.println("请输入圆形的半径:");
        double r=input.nextInt();
        double S=r*r*3.14;
        System.out.println("圆形的面积为:" + S);
    }//圆形相关数据的输入输出
}//圆形类



interface DiagArea{
    double getDiagonal(); //对角线长度
    double getArea();     //面积
}

class Rectangle2 implements DiagArea{
    Scanner input=new Scanner(System.in);
    protected double c;
    protected double k;
    public double getArea() {
        System.out.println("请输入矩形的长和宽:");
        c=input.nextInt();
        k=input.nextInt();
        double S=c*k;
        return S;
    }//矩形面积
    public double getDiagonal() {
        double L=Math.sqrt(c*c+k*k);
        return L;
    }//矩形对角线长度
}//矩形类 

class Square2 extends Rectangle2{
    private double x;
    Square2(){
        x=5;
    }
    public double getArea() {
        double S = x*x;
        return S;
    }//正方形面积
    public double getDiagonal() {
        double L=Math.sqrt(2*x*x);
        return L;
    }//正方形对角线长度
    public void xianshi() {
        double area=getArea();
        double diagonal = getDiagonal();
        System.out.println("正方形的边长为:" + x + "正方形的面积为:" + area + "正方形的对角线长为:" + diagonal);
    }//一次显示边长,面积,对角线长
}
3、截图:

4、错误分析:
在一开始敲击时难以理解接口的作用,所以只是敲击了第一部分抽象类部分,之后加上对抽象类的理解便渐渐明白了接口的作用,至于敲击代码并没有出现技术上的问题。因为我是在完全理解后才开始编程的。







三、班级信息管理类
1、设计思路:
设计父类,然后定义好父类的方法,在子类继承是只需要加入新的方法然后输出更加全面的信息即可。
2、源代码:
//信1705-2   20173629   何伟豪
package guanli;

import java.util.Scanner;
public class guanli {
    public static void main(String[] args) {
        Student stu=new Student(); 
        stu.rxingbie();
        stu.rshengri();
        stu.rxinxi();
        stu.cxinxi();
    }

}

class People{
    Scanner input = new Scanner(System.in);
    protected String sex;
    protected int year;
    protected int month;
    protected int day;
    public void rxingbie() {
        System.out.println("请输入性别:");
        sex = input.next();
    }//性别输入函数
    public void cxingbie() {
        System.out.println("性别为:" + sex);
    }//性别输出函数
    public void rshengri() {
        System.out.println("请输入出生日期:");
        year = input.nextInt();
        month = input.nextInt();
        day = input.nextInt();
    }//生日输入函数
    public void cshengri() {
        System.out.println("出生日期为:" + year + "/" + month + "/" + day);
    }//生日输出函数
}

class Student extends People{
    Scanner input = new Scanner(System.in);
    private String name;
    private int haoma;
    private String sum;
    private String home;
    public void rxinxi() {
        System.out.println("请输入大学生的姓名:");
        name=input.next();
        System.out.print("请输入大学生学号:");
        haoma=input.nextInt();
        System.out.println("请输入大学生的入学成绩:");
        sum=input.next();
        System.out.println("请输入大学生的籍贯:");
        home=input.next();
    }
    public void cxinxi() {
        cxingbie();
        cshengri();
        System.out.println("姓名:" + name + "学号:" + haoma + "成绩:" + sum + "籍贯:" +home);
    }
}
3、截图:

4、错误分析:没有明显错误,会出现丢分号的错误

四、按照题目要求设计并编写一个 JAVA 程序
1、设计思路:
首先定义好两个接口,然后开始在另一个类中开始实现,在之后就是添加一些要用到的数据和方法,在最后定义的判断是否需要贷款的方法中需要注意的就是月工资要乘12,学费要乘2。最后就是界面和性能的优化了。
2、源代码:
//信1705-2   20173629    何伟豪
package daikuan;

import java.util.Scanner;

public class DaiKuan {
    public static void main(String[] args) {
        while(true) {
            Graduate zhangsan = new Graduate();
            zhangsan.daiKuan();
        }
    }
}


interface StudentManageInterface{
    void setFee();
    void getFee();
}//学生接口
interface TeacherManageInterface{
    void setPay();
    void getPay();
}//教师接口

class Graduate implements StudentManageInterface,TeacherManageInterface{
    Scanner input = new Scanner(System.in);
    protected String name;
    protected String sex;
    protected int age;
    protected int fee;
    protected int pay;
    Graduate (){
        name="zhangsan";
        sex="男";
        age=25;
        fee=0;
        pay=0;
    }//构造函数
    public void setFee() {
        System.out.println("请输入每学期学费:");
        fee=input.nextInt();
    }//学费输入
    public void getFee() {
        System.out.println("每学期学费为:" +fee);
    }//学费输出
    public void setPay() {
        System.out.println("请输入每月工资:");
        pay=input.nextInt();
    }//工资输入 
    public void getPay() {
        System.out.println("每学期学费为:" +pay);
    }//工资输出
    public void daiKuan() {
        setFee();
        setPay();
        if((pay*12-fee*2)<2000) {//年工资减去年学费判断是否小于2000
            System.out.println("provide a loan(需要贷款)");//小有的话
            System.out.println("**************************");
        }else {
            System.out.println("不需要贷款");//不小于的话
            System.out.println("**************************");
        }
    }//判断是否需要贷款的方法
}
3、截图:

4、错误分析:因为有了实验二的经验,所以这个程序在敲击的时候没遇到问题。

猜你喜欢

转载自www.cnblogs.com/hwh000/p/9908631.html