Educoder - Java面向對象 - 類與對象各關卡題目總結


第1關:什么是類,如何創建類

1、編程要求:

 根據提示,在右側編輯器Begin-End處補充代碼:

  • 聲明一個Dog類,給Dog類添加三個String類型的屬性,分別是namecolorvariety,定義兩個方法,分別是,eatrun

  • main方法中創建一個名為wuhuarouDog對象,並設置name五花肉color棕色variety阿拉斯加

  • 使得調用wuhuarou對象的eat方法能輸出啃骨頭,調用run方法能輸出叼着骨頭跑

 

2、測試效果:

  測試輸入:

  預期輸出:使用中文冒號

  名字:五花肉,毛色:棕色,品種:阿拉斯加

  啃骨頭

  叼着骨頭跑

 

3、程序設計思路:

 (1)定義屬性和方法。

 (2)在主類的main方法中創建對應對象,設置Dog類的屬性。

 (3)采用對象調用兩個類中的方法。

 

4、程序實現:

package step1;

public class Test {
    public static void main(String[] args) {
        /********** Begin **********/
        Dog wuhuarou = new Dog(); //創建Dog對象
        //設置Dog對象的屬性
        wuhuarou.name = "五花肉";
        wuhuarou.color = "棕色";
        wuhuarou.variety="阿拉斯加";
        
        //輸出小狗的屬性
        System.out.println("名字:" +wuhuarou.name     + ",毛色:" +wuhuarou.color    + ",品種:" +wuhuarou.variety  );
        
        //調用方法
        wuhuarou.eat();
        wuhuarou.run();
        
        
    }
}        
        /********** End **********/
//在這里定義Dog類
/********** Begin **********/
      class Dog{
    String name;
    String color;
    String variety;
   void eat(){
       System.out.println("啃骨頭");
   }  
   void run(){
       System.out.println("叼着骨頭跑");
   }
    
} 
/********** End **********/

 

 


第2關:構造方法

1、編程要求:

   根據提示,在右側編輯器Begin-End處補充代碼:

  • 創建一個Person類,給Person類定義一個無參構造方法和一個有參構造方法,有參構造方法定義兩個String類型參數namesex,main方法中調用無參構造和有參構造方法;

  • 調用無參構造方法輸出:一個人被創建了

  • 調用有參構造方法應根據輸入的數據輸出對應的結果,如輸入:張三,則輸出:姓名:張三,性別:男,被創建了

 

2、測試效果:

  測試輸入:張富貴未知

  預期輸出:

  一個人被創建了

  姓名:張富貴,性別:未知,被創建了

 

3、程序設計思路:

 (1)注意無參構造法的創建格式。

 (2)有參和無參構造方法本質上涉及到的是方法的重載。

 

4、程序實現:

package step2;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        String sex = sc.next();
        /********** Begin **********/
        //分別使用兩種構造器來創建Person對象  
         Person p1 = new Person();
        Person p2 = new Person(name, sex);
        /********** End **********/
    }
}
//創建Person對象,並創建兩種構造方法
/********** Begin **********/
class Person{
    public Person() {
        System.out.println("一個人被創建了");
    }
    public Person(String name,String sex) {
        System.out.println("姓名:" + name + ",性別:" + sex + ",被創建了");
    }
}
/********** End **********/

 

5、題目總結:

 (1)對象在被創建的時候,也就是被new的時候,會自動調用構造方法。

 (2)如果定義的類沒有聲明構造方法,對象在創建時默認使用空的構造方法。

 (3)構造方法沒有返回值,沒有參數,名稱必須與類名相同。

 

 

第3關:選擇題

1、選擇題答案:C  CD

 

2、題目總結:

 (1)第二題尤為注意方法的重載,在同一類中,如果方法名稱相同,則涉及到方法的重載,這兩個方法的參數列表必須有所區別,可以是變量類型,可以是變量數量。

 

 

第4關:This關鍵字

1、編程要求:

  右側編輯器中已經編寫好了代碼,但是輸出結果不能讓我們滿意,請根據所學知識修改代碼,使其能輸出如下結果:

  name:baby

  age:45

  sex:女

 

2、測試效果:

  測試輸入:

  baby45

  預期輸出:

  name:baby

  age:45

  sex:女

 

3、程序設計思路:

 (1)運用this關鍵字使構造方法傳入的參數修改類中的成員變量。

 

4、程序實現:

package step3;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        int age = sc.nextInt();
        String sex = sc.next();
        Person p = new Person(name,age,sex);
        p.display();
    }
}

class Person{
    String name = "張三";
    int age = 18; 
    String sex = "男";
    /********** Begin **********/

    public Person(String name,int age,String sex){
        this(age);
        this.name = name;
        this.sex = sex;
    }
    
    public Person(int age){
        this.age = age;
    }
    
    public void display(){
        System.out.println("name:" + name);
        System.out.println("age:" + age);
        System.out.println("sex:" + sex);
    }
    /********** End **********/
}

 

5、題目總結:

 (1)this()調用的是Person自己的無參構造方法。

 (2)this.name訪問的是Person對象自身的name,而方法參數中的name則表示方法傳入的值。

 

 

第5關:類與對象練習

1、編程要求:

  我已經幫你創建好了兩個文件一個是WuMingFen.java,另一個是Test.java,你需要切換文件在兩個文件中編寫代碼來完成本關任務。

  為“無名的粉”寫一個類:class WuMingFen 要求:

  • 有三個屬性:面碼:String theMa 粉的分量(兩):int quantity是否帶湯:boolean likeSoup

  • 寫一個構造方法,以便於簡化初始化過程,如: WuMingFen f1 = new WuMingFen("牛肉",3,true);

  • 重載構造方法,使得初始化過程可以多樣化: WuMingFen f2 = new WuMingFen("牛肉",2);

  • 如何使得下列語句構造出來的粉對象是酸辣面碼、2兩、帶湯的? WuMingFen f3 = new WuMingFen();

  • 寫一個普通方法:check(),用於查看粉是否符合要求。即:將對象的三個屬性打印在控制台上。

 

2、測試效果:

  我會對你編寫的代碼進行測試:

  測試輸入:

  牛肉3true

  預期輸出:

  面碼:牛肉,粉的份量:3兩,是否帶湯:true

  面碼:牛肉,粉的份量:3兩,是否帶湯:false

  面碼:酸辣,粉的份量:2兩,是否帶湯:true

  測試輸入:

  三鮮1true

  預期輸出:

  面碼:三鮮,粉的份量:1兩,是否帶湯:true

  面碼:三鮮,粉的份量:1兩,是否帶湯:false

  面碼:酸辣,粉的份量:2兩,是否帶湯:true

 

3、程序設計思路:

  (1)首先觀察輸出中的不同點,一和二只有是否帶湯不同,三前兩項和一二都不相同,而根據要求三的構造方法沒有參數,所以想到在設置屬性時先將面碼和粉的份量定下來。

  (2)一和二和明顯是構造方法不同重載形式造成的,由於一利用參數可以修改是否帶湯屬性,所以二的是否帶湯屬性一定來自WuMingFen的成員變量。

 

4、程序實現:

(1)WuMingFen類:

/********** Begin **********/
//在這里添加包名  step4
package step4;   
//創建類 添加屬性和方法
public class WuMingFen{
    String theMa = "酸辣";
    int quantity = 2;
    boolean likeSoup = false;
    public WuMingFen() {
        likeSoup = true;
    }
    public WuMingFen(String theMa, int quantity, boolean likeSoup) {
        this.theMa = theMa;
        this.quantity = quantity;
        this.likeSoup = likeSoup;
    }
    public WuMingFen(String theMa, int quantity) {
        this.theMa = theMa;
        this.quantity = quantity;
    }
    public void check(){
        System.out.println("面碼:"+ theMa +",粉的份量:" + quantity + "兩,是否帶湯:" + likeSoup );
    }
}
/********** End **********/    

(2)Test類:

package step4;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String theMa = sc.next();
        int quantity = sc.nextInt();
        boolean likeSoup = sc.nextBoolean();
        /********** Begin **********/
        //使用三個參數的構造方法創建WuMingFen對象  取名 f1
        WuMingFen f1 = new WuMingFen(theMa, quantity, likeSoup);
        //使用兩個參數的構造方法創建WuMingFen對象  取名 f2
        WuMingFen f2 = new WuMingFen(theMa, quantity);
        //使用無參構造方法創建WuMingFen對象  取名 f3
        WuMingFen f3 = new WuMingFen();
        //分別調用三個類的 check方法
        f1.check();
        f2.check();
        f3.check();
        /********** End **********/    
    }
}

 

 

第6關:static關鍵字

1、編程要求:

  現在編輯器中代碼有異常,請利用本關所學知識修改右側代碼使其能輸出如下結果:

  hello educoder

  我叫楚留香

  我喜歡在educoder上學習java

 

2、程序設計思路:

  (1)修改代碼即可,知道static修飾的規則。

 

3、程序實現:

package step5;
public class Test {
    /********** Begin **********/
    static String name = "楚留香";
    static{
        System.out.println("hello educoder");
    }
    public static void main(String[] args) {
        System.out.println("我叫" + name);
        study();
    }
    public static void study(){
        System.out.println("我喜歡在educoder上學習java");
    }
    /********** End **********/
}

 

4、題目總結:

 (1)如果一個類的成員變量被static修飾了,那么所有該類的對象都共享這個變量,對於方法也一樣。(類名.變量名/方法名)

 (2)靜態方法不能使用非靜態變量。

 (3)靜態代碼塊是不需要依賴main方法就可以獨立運行的,其中只能直接調用靜態的屬性和方法,在類被加載的時候運行且只運行一次(必定運行一次)。

 (4)在Java中是不能用static關鍵字修飾局部變量的。(人為規定)

   其實這些變量都之所以叫局部變量,其作用域也只限於聲明它的方法體內。在方法被調用時,這些局部變量獲得內存空間,到方法執行結束時,他們所占據的內存空間就被釋放。

   而static,public是用來聲明全局變量或是被其他對象引用的變量。

 

 

第7關:選擇題

1、選擇題答案:D  EG  B

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM