[英]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.