[英]Best practice in Java for extending abstract class with overriding one method
[英]Java: Best practice to define a method in relation to a class
我進行了以下練習:
“鑒於這堂課,
class Test { int a; Test(int a) { this.a = a; } }
編寫一個稱為swap()的方法,該方法交換兩個測試對象引用所引用的對象的內容。”
我寫了三個稍有不同的練習示例:
例子1
class Test {
public int a;
Test(int a) {
this.a = a;
}
public void swap(Test otherObject) {
int tempVar;
tempVar = this.a;
this.a = otherObject.a;
otherObject.a = tempVar;
}
}
class Chapter6_2c {
public static void main(String[] args) {
Test obj1 = new Test(1);
Test obj2 = new Test(2);
System.out.println("obj1 has value " + obj1.a);
System.out.println("obj2 has value " + obj2.a);
obj1.swap(obj2);
System.out.println("\nafter swap()\n");
System.out.println("obj1 has value " + obj1.a);
System.out.println("obj2 has value " + obj2.a);
}
}
例子2
class Test {
public int a;
Test(int a) {
this.a = a;
}
public static void swap(Test objectOne, Test objectTwo) {
int tempVar;
tempVar = objectOne.a;
objectOne.a = objectTwo.a;
objectTwo.a = tempVar;
}
}
class Chapter6_2b {
public static void main(String[] args) {
Test obj1 = new Test(1);
Test obj2 = new Test(2);
System.out.println("obj1 has value " + obj1.a);
System.out.println("obj2 has value " + obj2.a);
Test.swap(obj1, obj2);
System.out.println("\nafter swap()\n");
System.out.println("obj1 has value " + obj1.a);
System.out.println("obj2 has value " + obj2.a);
}
}
例子3
class Test {
int a;
Test(int a) {
this.a = a;
}
}
class Chapter6_2a {
public static void swap(Test objectOne, Test objectTwo) {
int tempVar;
tempVar = objectOne.a;
objectOne.a = objectTwo.a;
objectTwo.a = tempVar;
}
public static void main(String[] args) {
Test obj1 = new Test(1);
Test obj2 = new Test(2);
System.out.println("obj1 has value " + obj1.a);
System.out.println("obj2 has value " + obj2.a);
swap(obj1, obj2);
System.out.println("\nafter swap()\n");
System.out.println("obj1 has value " + obj1.a);
System.out.println("obj2 has value " + obj2.a);
}
}
在示例1和2中,swap()方法被編寫為Test類的成員,不同之處在於示例2中的定義為靜態。 在示例3中,swap()方法在main()方法內部定義。
我的問題是 ,從設計,開銷和清晰度的角度來看,哪種方法是定義swap()方法的最佳實踐或最專業的方法?
我確實有一些想法,但是我真的需要您的意見以確認它們是對還是錯:
從示例的角度來看,在示例1和2之間,我認為最好的方法是將swap()方法定義為靜態方法(示例2),因為該類的實例中不包括該類的靜態成員。 我的假設正確嗎?
從設計和清晰度的角度來看,示例3並不是定義swap()方法的好習慣,因為首先,swap()方法與Test類非常相關,應將其定義為其成員,然后通常將其定義為最好在緊密相關的類中定義main()之外的所有方法。 這個假設也正確嗎?
我預先感謝您抽出寶貴的時間來幫助我!!!
由於Java編程語言是一種獨立於現代平台的,面向對象的語言,即“編寫一次,隨處運行”,因此我將使用示例1。這是因為您確實將Java用作了其專門設計的面向對象的語言。 它需要更多的技巧也是在我看來,以創建使用對象和對象的引用來處理所有的事情在程序main
像一個舊的程序語言或一個簡單的腳本。
因此,我認為示例1是最優雅,最精致的。 另外,您始終可以擴展該類並在子類中重寫swap()方法以實現不同的功能。 但是,使用靜態方法無法覆蓋。 覆蓋,封裝和多態性是面向對象語言的強大功能的一部分。 使用實例方法可以做到這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.