Java類和對象的設計原理

 更新時間:2022年07月06日 09:41:13   作者:王小王_123???????  
這篇文章主要介紹了Java類和對象的設計原理,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下

一、實驗目的

  • 1. 掌握面向對象的編程思想、類與對象;
  • 2. 掌握類的封裝性、繼承性和多態性的作用;
  • 3. 掌握成員變量和成員方法的特性、構造方法、toString方法、equals方法的使用;
  • 4. 掌握this、super、final、static等關鍵字的使用;
  • 5. 掌握接口及接口對象的使用;
  • 6. 掌握包的定義與使用;
  • 7. 掌握四種訪問控制權限private、default、protected、public。

二、實驗代碼

1.定義一個類MyProgram,包含兩個屬性:

一個是private的整型屬性data、一個是private的String類型屬性str,封裝這兩個屬性的四個方法setData( )和getData( )、setStr( )和getStr( );重寫toString方法(自定義格式);重寫equals方法(屬性data和屬性str均相同才表示兩個對象相等)。并編寫測試程序,測試MyProgram類的使用。

package 作業練習.test2;
public class MyProgram {
public static void main(String[] args) {
Test t1=new Test();
Test t2=new Test();
t1.setStr("A");
t2.setStr("B");
t1.setData(1);
t2.setData(2);
System.out.println(t1.equals(t2));
System.out.println(t1.toString());
System.out.println(t2.toString());
}

}
class Test{
private String str;
private int data;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
@Override
public boolean equals(Object object) {
Test test =(Test) object;
if(test.getData()==this.getData()&&test.getStr() == this.getStr()) {
return true;
}
else {
return false;
}
}
@Override
public String toString() {
return "str為"+this.getStr()+"\tdata為:"+this.getData();
}
}

2. 在Vehicle類的基礎上創建一個Tractor(拖拉機)類

它不僅擁有journey、wheelNum、LoadNum、driveSpeed四個屬性和DriveAt()方法,而且還擁有自己的plough()方法,在該方法中要求能夠顯示journey、wheelNum、LoadNum三個屬性的值。請編寫測試類,調用DriveAt()、plough()方法。

package 作業練習.test2;

public class Vehicle {
public float journey;
public int wheelNum;
public int loadNum;
public int driveSpeed;

public Vehicle() {
journey = 100.3f;
wheelNum = 4;
loadNum = 1;
}

public void driveAt(int speed) {
if (speed >= 60) {
System.out.println("行車速度太快,容易造成事故");
driveSpeed = 40;
} else {
System.out.println("你在安全行駛速度內行駛");
driveSpeed = speed;
}
}
}
package 作業練習.test2;
public class Tractor extends Vehicle {
public void plough() {
System.out.println("公里數:"+this.journey);
System.out.println("車速:"+this.driveSpeed);
System.out.println("承載量:"+this.loadNum);
}
public static void main(String[] args) {
Tractor t = new Tractor();
t.plough();
t.driveAt(80);
t.plough();
}
}

3. 組合實現汽車類

問題描述:一輛Car有(has)四個輪子(Wheels)和一個發動機(Engine)?,F在要求用組合方法設計類Car、類Wheel和類Engine。

(1) 類Engine 有字符串屬性type記錄發動機的型號;

有構造方法,可設置發動機的型號;

有方法start()啟動引擎(輸出發動機型號和字符串“starts”的)。

(2)類Wheel有字符串屬性type記錄輪胎的型號,有整數類型屬性index記錄當前輪胎編號(1:front-left,2:front-right,3:back-left,4:back-right);

有構造方法,可設置輪胎的型號和編號;

有方法roll()表示輪胎正在轉動(輸出輪胎型號、輪胎位置和“rolling”的字符串)。

(3)類Car有字符串屬性model記錄轎車的型號,有屬性wheels[]和engine,分別是Wheel類對象數組和Engine類對象;

有構造方法,參數是三個字符串,分別表示轎車的型號、輪胎型號和發動機的型號;

有方法changeWheel()可以改變指定輪胎的型號;

有方法start(),先輸出轎車型號和字符串“firing”,然后調用Engine的start(),再調用所有輪胎的roll(),最后顯示轎車型號和字符串“running”。

(4)編寫測試程序測試上述所有方法。

package 作業練習.test2;

class Engine extends Car {
String type ;

public void Engine(String type) {
this.type = type;
}

void start() {
System.out.println(type + " starts");
}
}

class Wheel extends Car {
String type ;
int index = 0;

public void Wheel(String type, int index) {
this.type = type;
this.index = index;
}

void roll() {
System.out.println("wheel" + index + " " + type + " rolling");
}
}

public class Car {
String model;
static Wheel[] wheels;
static Engine engine = new Engine();

Car(String model, Wheel[] wheels, String eg) {
this.model = model;
this.wheels = wheels;
engine.Engine(eg);
}
Car() {

}
public void changeWheel(int index, String str) {
wheels[index - 1].Wheel(str, index);
}

void start() {
System.out.println(model + " firing");
engine.start();
for (int i = 0; i < 4; i++) {
wheels[i].roll();
}
}
public static void main(String[] args) {
Wheel[] wheels = new Wheel[4];
String model = "瑪莎拉蒂";
String engine = "FSI2.0L";
for (int i = 1; i <= 4; i++) {
wheels[i - 1] = new Wheel();
wheels[i - 1].Wheel("德國馬牌", i);
}
Car car = new Car(model, wheels, engine);
car.start();
System.out.println("-----更改輪胎型號-----");
car.changeWheel(2, "米其林");
car.changeWheel(3, "倍耐力");
car.start();
}
}

4. 有圖形接口Shape

有圖形接口Shape,參照圓Circle類補充完整正方形Square和三角形Triangle類,并分析運行結果。

package 作業練習.test2;
interface Shape {
void draw();
void erase();
}
class Circle implements Shape {
public void draw() {
System.out.println("Circle.draw()");
}
public void erase() {
System.out.println("Circle.erase()");
}
}
class Square implements Shape {
public void draw() {
System.out.println("Square.draw()");
}
public void erase() {
System.out.println("Square.draw()");
}
}
class Triangle implements Shape {
public void draw() {
System.out.println("Triangle.draw()");
}
public void erase() {
System.out.println("Triangle.draw()");
}
}
public class Shapes {
public static Shape randShape() {
switch ((int) (Math.random() * 3)) {
default:
case 0:
return new Circle();
case 1:
return new Square();
case 2:
return new Triangle();
}
}
public static void main(String[] args) {
Shape[] s = new Shape[9];
for (int i = 0; i < s.length; i++)
s[i] = randShape();
for (int i = 0; i < s.length; i++)
s[i].draw();
}
}

5. USB接口程序設計

通常人們使用的計算機上都有USB接口,鼠標、鍵盤、麥克風等都可以連接到USB接口中使用。在計算機啟動時,這些設備也隨之啟動;當計算機關閉時,這些設備也會隨之關閉。鼠標、鍵盤、麥克風等USB接口設備都啟動后,計算機才開機成功;當這些設備都關閉后,計算機才關機成功。

讀所編寫的USB接口程序,該程序模擬了計算機的開機和關機過程,寫出運行結果。

package 作業練習.test2.USB接口;
public class Computer {
private USB[] usbArr=new USB[4];
//向計算機上連接一個USB設備
public void add(USB usb){
//遍歷所有的插槽
for(int i=0;i<usbArr.length;i++){
//如果發現一個空的
if(usbArr[i]==null){
usbArr[i]=usb;
break;
}
}
}
//計算的開機功能
public void powerOn(){
//遍歷所有的插槽
for(int i=0;i<usbArr.length;i++){
//如果發現有設備
if(usbArr[i]!=null){
//將USB設備啟動
usbArr[i].turnOn();
}
}
System.out.println("計算機開機成功?。?!");
}
//計算的關機功能
public void powerOff(){
//遍歷所有的插槽
for(int i=0;i<usbArr.length;i++){
//如果發現有設備
if(usbArr[i]!=null){
//將USB設備關閉
usbArr[i].turnOn();
}
}
System.out.println("計算機關機成功?。?!");
}
}
package 作業練習.test2.USB接口;
public class KeyBoard implements USB {
@Override
public void turnOn() {
System.out.println("鍵盤啟動了......");
}
@Override
public void turnOff() {
System.out.println("鍵盤關閉了......");
}
}
package 作業練習.test2.USB接口;
public class Mic implements USB {
@Override
public void turnOn() {
System.out.println("麥克風啟動了......");
}
@Override
public void turnOff() {
System.out.println("麥克風關閉了......");
}
}
package 作業練習.test2.USB接口;
public class Mouse implements USB {
@Override
public void turnOn() {
System.out.println("鼠標啟動了......");
}
@Override
public void turnOff() {
System.out.println("鼠標關閉了......");
}
}
package 作業練習.test2.USB接口;
public class Test {
public static void main(String[] args) {
//實例化計算機對象
Computer computer=new Computer();
//向計算機中添加鼠標、麥克風、鍵盤
computer.add(new Mouse());
computer.add(new Mic());
computer.add(new KeyBoard());
//啟動計算機
computer.powerOn();
//關閉計算機
computer.powerOff();

}
}
package 作業練習.test2.USB接口;
public interface USB {
void turnOn();//啟動
void turnOff();//關閉
}

6.this關鍵字主要有三個應用:

(1)this調用本類中的屬性,也就是類中的成員變量;

(2)this調用本類中的其他方法;

(3)this調用本類中的其他構造方法,調用時要放在構造方法的首行。

7.請簡述static關鍵字的作用

static是一個修飾符,用于修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優化程序性能。

static修飾的方法一般稱作靜態方法,由于靜態方法不依賴于任何對象就可以進行訪問,因此對于靜態方法來說,是沒有this的,因為它不依附于任何對象,既然都沒有對象,就談不上this了。并且由于這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因為非靜態成員方法/變量都必須依賴具體的對象才能夠被調用。static塊可以優化程序性能,是因為它的特性:只會在類被初次加載的時候執行一次。

8.請簡述super關鍵字的作用

super用于在 派生類中調用父類的重名方法,或者引用重名的變量。super被用在派生類中,就是為了明確調用父類的方法。

class base
{
int a = 100;
}

class sup1 extends base
{
int a = 200;
void show()
{
System.out.println(a);
System.out.println(a);
}
public static void main(String[] args)
{
new sup1().show();
}
}

9.請簡述final關鍵字的作用

final關鍵字可以用于三個地方。用于修飾類、類屬性和類方法。被final關鍵字修飾的類不能被繼承,被final關鍵字修飾的類屬性和類方法不能被覆蓋(重寫);對于被final關鍵字修飾的類屬性而言,子類就不能給他重新賦值了,如果重新賦值,會報錯

到此這篇關于Java類和對象的設計原理的文章就介紹到這了,更多相關Java類和對象 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于springboot+jwt實現刷新token過程解析

    基于springboot+jwt實現刷新token過程解析

    這篇文章主要介紹了基于springboot+jwt實現刷新token過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Java?Lambda表達式常用的函數式接口

    Java?Lambda表達式常用的函數式接口

    這篇文章主要介紹了Java?Lambda表達式常用的函數式接口,文章基于Java?Lambda表達式展開對常用的函數式接口的介紹,具有一的的參考價值需要的小伙伴可以參考一下
    2022-04-04
  • datax-web在windows環境idea中模塊化打包部署操作步驟

    datax-web在windows環境idea中模塊化打包部署操作步驟

    這篇文章主要介紹了datax-web在windows環境idea中模塊化打包部署操作步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • java統計字符串中重復字符出現次數的方法

    java統計字符串中重復字符出現次數的方法

    這篇文章主要介紹了java統計字符串中重復字符出現次數的方法,涉及java針對字符串的遍歷與判斷相關操作技巧,需要的朋友可以參考下
    2016-08-08
  • 聊聊如何打印GC日志排查的問題

    聊聊如何打印GC日志排查的問題

    這篇文章主要介紹了聊聊如何打印GC日志排查的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java Socket+多線程實現多人聊天室功能

    Java Socket+多線程實現多人聊天室功能

    這篇文章主要為大家詳細介紹了Java Socket+多線程實現多人聊天室功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java8與Scala中的Lambda表達式深入講解

    Java8與Scala中的Lambda表達式深入講解

    這篇文章主要給大家介紹了關于Java8與Scala中Lambda表達式的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • IDEA自定義pom依賴的步驟詳解

    IDEA自定義pom依賴的步驟詳解

    這篇文章主要介紹了IDEA自定義pom依賴的步驟詳解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 詳解SpringMVC的url-pattern配置及原理剖析

    詳解SpringMVC的url-pattern配置及原理剖析

    這篇文章主要介紹了SpringMVC的url-pattern配置及原理剖析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • java.lang.OutOfMemoryError: Metaspace異常解決的方法

    java.lang.OutOfMemoryError: Metaspace異常解決的方法

    這篇文章主要介紹了java.lang.OutOfMemoryError: Metaspace異常解決的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03

最新評論

美丽人妻被按摩中出中文字幕