1. 程式人生 > >第四次實驗及動手動腦

第四次實驗及動手動腦

繼承與多型
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、錯誤分析:因為有了實驗二的經驗,所以這個程式在敲擊的時候沒遇到問題。