การโอเวอร์โหลดและการเอาชนะใน Java
ที่มา: สื่อ ในบทความนี้ คุณจะได้เรียนรู้เกี่ยวกับวิธีการ Overriding และ Overloading ในภาษา Java เนื่องจากความจริงที่ว่าทั้งสองคำนี้มักจะสับสนระหว่างกันจึงควรทำความเข้าใจอย่างชัดเจนถึงวัตถุประสงค์ของแต่ละวิธีและตัวเลือกสำหรับการสมัคร
การโอเวอร์โหลด
การใช้มากกว่าหนึ่งวิธีด้วยชื่อเดียวกัน แต่มีพารามิเตอร์ต่างกันในคลาสเดียวกันหรือวิธีการระหว่างซูเปอร์คลาสและคลาสย่อยใน Java เรียกว่า Overloading เพื่อหลีกเลี่ยงปัญหานี้ จะมีการใช้วิธีการเดียวแทนหลายวิธีที่ดำเนินการคล้ายกัน เรามาอธิบายด้วยตัวอย่าง:public class MethodOverloading {
public static void main(String[] args){
MethodOverloading operation = new MethodOverloading();
operation.mod(12,4);
operation.mod(12.4,4.2);
}
void mod(double a, double b){
System.out.println(a % b);
}
void mod(int a, int b){
System.out.println(a % b);
}
}
ในรหัสนี้ วิธีดำเนินการมากเกินไป วิธีการที่มีชื่อเดียวกันจะยอมรับพารามิเตอร์ประเภทต่างๆ การเลือกโหมดจะถูกกำหนดแยกกันสำหรับพารามิเตอร์intและdouble เมื่อเรารันโปรแกรมoperation.mod (12,4)รันvoid.mod (int a, int b)และoperation.mod (12.4,4.2)รันvoid.mod (double a, double b )
การเอาชนะ
ใน Java เราสามารถสร้างซูเปอร์คลาสและคลาสย่อยที่สืบทอดมาจากคลาสนั้นได้ คลาสย่อยเหล่านี้สามารถแทนที่และแทนที่วิธีการของคลาสพาเรนต์ที่สืบทอดมาได้ ทำได้โดยใช้วิธี Overriding สิ่งนี้สามารถเข้าใจได้ดีขึ้นด้วยตัวอย่าง:public class MethodOverriding {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sound();
Bee bee = new Bee();
bee.sound();
}
}
class Animal {
void sound(){
System.out.println("Animal sounds");
}
}
class Cat extends Animal{
@Override
void sound() {
System.out.println("Cat : meow meow");
}
}
class Bee extends Animal{
@Override
void sound() {
System.out.println("Bee : buzz buzz");
}
}
ตัวอย่างโค้ดนี้สร้างซูเปอร์คลาสชื่อAnimalและคลาสย่อยชื่อCatและBeeที่สืบทอดมาจากซูเปอร์คลาสนั้น วิธีการเสียงในซูเปอร์คลาสถูกแทนที่ หมายเหตุ:การแยกวิธีการโอเวอร์โหลดเกิดขึ้นในขั้นตอนการคอมไพล์ การแยกวิธีการแทนที่เกิดขึ้นเมื่อรันไทม์
5 วิธี Java ที่คุณไม่รู้
ที่มา: Javarevisited ระบบนิเวศการพัฒนา Java มีเครื่องมือมากมายที่โปรแกรมเมอร์สามารถนำเข้าและใช้ในโปรแกรมของตนได้ ซึ่งรวมถึงคลาสและวิธีการในตัว พวกเขาทำให้การทำงานของโปรแกรมเมอร์ง่ายขึ้นอย่างมากและช่วยให้พวกเขาเข้าใจและเขียนโค้ดได้ดีขึ้น นักพัฒนาทุกคนควรรู้เกี่ยวกับพวกเขา ต่อไปนี้เป็นวิธีการ Java 5 วิธีที่ค่อนข้างหายาก แต่มีประโยชน์มากในการทำงานของคุณ1. การลดลงอย่างแน่นอน
decreatExact()เป็นฟังก์ชัน Java พื้นฐานจาก คลาส Mathที่จะลด/ลบอาร์กิวเมนต์ที่กำหนด (ตัวเลข) ทีละหนึ่งและส่งกลับผลลัพธ์ ฟังก์ชันนี้จะตรงกันข้ามกับฟังก์ชันincreatExact() ตัวอย่างเช่น หากอาร์กิวเมนต์ที่กำหนดคือ 11 ผลลัพธ์จะเป็น 10 หากการลดอาร์กิวเมนต์ทำให้ชนิดข้อมูลล้น ข้อยกเว้นจะเกิดขึ้น ดังนั้นจึงเป็นเรื่องสำคัญที่ต้องระมัดระวังเมื่อใช้ฟังก์ชันนี้ โดยเฉพาะอย่างยิ่งสำหรับตัวเลขจำนวนมาก โดยปกติแล้ว ฟังก์ชันนี้จะใช้จำนวนเต็ม ไวยากรณ์:Math.decrementExact(number);
ตัวอย่าง:
System.out.println(Math.decrementExact(11));
// Output: 10
2.getAsDouble
getAsDouble ()เป็นวิธีการที่อยู่ใน คลาส OptionalDouble วัตถุOptionalDoubleคือวัตถุที่อาจเก็บตัวเลขคู่ได้ เมธอดในคลาสสามารถใช้เพื่อดำเนินการกับค่าสองเท่าที่มีอยู่ในออบเจ็กต์ หรือเพื่อบ่งชี้ว่าค่าสองเท่านั้นไม่มีอยู่เลย getAsDouble()เป็นหนึ่งในวิธีการดังกล่าว และจะส่งกลับค่าสองเท่าหากมีอยู่ มิฉะนั้นNoSuchElementException จะถูกส่งออก ไป ไวยากรณ์:OptionalDoubleObject.getAsDouble();
ตัวอย่าง:
OptionalDouble num = OptionalDouble.of(15.0);
System.out.println(num.getAsDouble());
// Output: 15.0
3.absExact
เมธอดabsExact() คล้ายกับ ฟังก์ชันabs()ในคลาสMath ส่งกลับค่าสัมบูรณ์ของตัวเลข ซึ่งเป็นค่าบวกของตัวเลขโดยไม่คำนึงถึงเครื่องหมาย ข้อแตกต่างเพียงอย่างเดียวคือมันจะทำเช่นนี้ก็ต่อเมื่อมีการแสดงเป็นประเภทข้อมูลเท่านั้น ( intหรือlong ) หากผลลัพธ์ของค่าที่ ส่ง คืนเกินประเภทข้อมูลดั้งเดิม ระบบ จะส่งออกArithmeticException ไวยากรณ์:Math.absExact(number);
ตัวอย่าง:
System.out.println(Math.absExact(-11));
// Output: 11
4.จบด้วย
EndsWith()เป็นวิธีการสตริงในตัวที่ส่งกลับค่าบูลีน ขึ้นอยู่กับว่าสตริงที่กำหนดลงท้ายด้วยคำต่อท้ายบางอย่าง (คำสิ้นสุด/สตริง) ในพารามิเตอร์ วิธีนี้จะตรงกันข้ามกับ วิธี การ startWith()ซึ่งนักพัฒนาหลายคนอาจคุ้นเคย ไวยากรณ์:String.endsWith(String suffix);
ตัวอย่าง:
String phrase = "I like bananas";
System.out.println(phrase.endsWith("bananas")); // true
System.out.println(phrase.endsWith("Tandrew")); // false
/* Output:
true
false
*/
5. แบ่งแยกไม่ออก
เมธอดDivideUnsigned()เป็นเมธอดจาก คลาส Integerที่ให้คุณหารตัวเลขสองตัวแล้วส่งกลับผลลัพธ์ของการหาร จำนวนเต็มที่ไม่ได้ลงนาม เมื่อเปรียบเทียบกับจำนวนเต็มที่ลงนามปกติ จะแสดงได้เฉพาะจำนวนบวกเท่านั้น ทั้งจำนวนเต็มที่ไม่ได้ลงนามและจำนวนเต็มที่ลงนามมีจำนวนตัวเลขในช่วงเท่ากัน (ขนาดของช่วงคือ 65,536 หมายเลข) อย่างไรก็ตาม เนื่องจากจำนวนเต็มที่ไม่ได้ลงนามไม่สามารถเป็นค่าลบได้ ค่าสูงสุดในช่วงบวกจึงสูงกว่าค่าสูงสุดสำหรับจำนวนเต็มที่ลงนามปกติมาก เพื่อให้ง่ายขึ้น เราสามารถดูตัวอย่างของไบต์ที่ลงนามและไม่ได้ลงนามแทน ไบต์มีช่วง 256 ตัวเลข ไบต์ปกติสามารถมีค่าได้ตั้งแต่ -128 ถึง 127 อย่างไรก็ตาม ไบต์ที่ไม่ได้ลงนามสามารถมีค่าได้ตั้งแต่ 0 ถึง 255 มิฉะนั้น ฟังก์ชันจะทำงานเหมือนกับการหารปกติทุกประการ ไวยากรณ์:Integer.divideUnsigned(int dividend, int divisor);
ตัวอย่าง:
int dividend = 10;
int divisor = 5;
int quotient = Integer.divideUnsigned(dividend, divisor);
System.out.println(quotient);
// Output: 2
บทสรุป
นี่คือบทสรุปของฟังก์ชันและวิธีการที่กล่าวถึงในบทความนี้:-
decreationExact - ลด/ลบตัวเลขที่กำหนดด้วย 1
-
getAsDouble - ส่วนหนึ่งของ ฟังก์ชัน OptionalDoubleส่งคืนตัวเลขที่มีค่าสองเท่าหรือระบุว่าไม่มีอยู่
-
absExact - ส่งกลับค่าสัมบูรณ์ของตัวเลขหากสามารถแสดงเป็นชนิดข้อมูลต้นฉบับได้
-
endsWith() - ส่งกลับค่าบูลีนขึ้นอยู่กับว่ามีคำต่อท้ายที่ระบุอยู่ในสตริงที่กำหนดหรือไม่
-
divideUnsigned() - ทำการหารปกติ ส่งคืนผลลัพธ์ของการหารตัวเลข
GO TO FULL VERSION