Java - วัตถุและคลาส
Java เป็นภาษาเชิงวัตถุ ในฐานะภาษาที่มีคุณลักษณะเชิงวัตถุ Java จึงสนับสนุนแนวคิดพื้นฐานดังต่อไปนี้ -
- Polymorphism
- Inheritance
- Encapsulation
- Abstraction
- Classes
- Objects
- Instance
- Method
- ข้อความผ่าน
ในบทนี้เราจะพิจารณาแนวคิด - คลาสและวัตถุ
Object- วัตถุมีสถานะและพฤติกรรม ตัวอย่าง: สุนัขมีสถานะ - สีชื่อสายพันธุ์ตลอดจนพฤติกรรม - กระดิกหางเห่ากิน วัตถุคือตัวอย่างของการเรียน.
Class - คลาสสามารถกำหนดเป็นเทมเพลต / พิมพ์เขียวที่อธิบายพฤติกรรม / สถานะที่อ็อบเจ็กต์ประเภทรองรับ
วัตถุใน Java
ตอนนี้ให้เรามองลึกลงไปว่าอะไรคือวัตถุ หากเราพิจารณาโลกแห่งความเป็นจริงเราจะพบสิ่งของมากมายรอบตัวเรารถยนต์สุนัขมนุษย์ ฯลฯ วัตถุทั้งหมดเหล่านี้มีสถานะและพฤติกรรม
หากเราพิจารณาสุนัขสถานะของมันคือ - ชื่อสายพันธุ์สีและพฤติกรรมคือ - เห่ากระดิกหางวิ่ง
หากคุณเปรียบเทียบออบเจ็กต์ซอฟต์แวร์กับวัตถุในโลกแห่งความเป็นจริงพวกมันมีลักษณะที่คล้ายคลึงกันมาก
ออบเจ็กต์ซอฟต์แวร์ยังมีสถานะและพฤติกรรม สถานะของอ็อบเจ็กต์ซอฟต์แวร์จะถูกเก็บไว้ในฟิลด์และพฤติกรรมจะแสดงผ่านวิธีการ
ดังนั้นในการพัฒนาซอฟต์แวร์เมธอดจะดำเนินการกับสถานะภายในของอ็อบเจ็กต์และการสื่อสารอ็อบเจ็กต์กับอ็อบเจ็กต์จะทำผ่านวิธีการ
คลาสใน Java
คลาสคือพิมพ์เขียวที่ใช้สร้างวัตถุแต่ละชิ้น
ต่อไปนี้เป็นตัวอย่างของคลาส
ตัวอย่าง
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
คลาสสามารถมีตัวแปรประเภทใดก็ได้ดังต่อไปนี้
Local variables- ตัวแปรที่กำหนดภายในวิธีการตัวสร้างหรือบล็อกเรียกว่าตัวแปรท้องถิ่น ตัวแปรจะถูกประกาศและเริ่มต้นภายในเมธอดและตัวแปรจะถูกทำลายเมื่อเมธอดเสร็จสมบูรณ์
Instance variables- ตัวแปรอินสแตนซ์คือตัวแปรภายในคลาส แต่อยู่นอกเมธอดใด ๆ ตัวแปรเหล่านี้เริ่มต้นเมื่อคลาสถูกสร้างอินสแตนซ์ ตัวแปรอินสแตนซ์สามารถเข้าถึงได้จากภายในเมธอดตัวสร้างหรือบล็อกของคลาสนั้น ๆ
Class variables - ตัวแปรคลาสคือตัวแปรที่ประกาศภายในคลาสนอกเมธอดใด ๆ ด้วยคีย์เวิร์ดแบบคงที่
คลาสสามารถมีเมธอดจำนวนเท่าใดก็ได้เพื่อเข้าถึงค่าของเมธอดประเภทต่างๆ ในตัวอย่างข้างต้นการเห่า (), หิว () และการนอนหลับ () เป็นวิธีการ
ต่อไปนี้เป็นหัวข้อสำคัญบางส่วนที่ต้องพูดถึงเมื่อพิจารณาถึงคลาสของภาษา Java
ตัวสร้าง
เมื่อพูดถึงชั้นเรียนหนึ่งในหัวข้อย่อยที่สำคัญที่สุดคือตัวสร้าง ทุกชั้นมีตัวสร้าง ถ้าเราไม่เขียนคอนสตรัคเตอร์สำหรับคลาสอย่างชัดเจนคอมไพลเลอร์ Java จะสร้างคอนสตรัคเตอร์เริ่มต้นสำหรับคลาสนั้น
ทุกครั้งที่สร้างออบเจ็กต์ใหม่จะมีการเรียกตัวสร้างอย่างน้อยหนึ่งตัว กฎหลักของคอนสตรัคเตอร์คือควรมีชื่อเดียวกับคลาส คลาสสามารถมีตัวสร้างได้มากกว่าหนึ่งตัว
ต่อไปนี้เป็นตัวอย่างของตัวสร้าง -
ตัวอย่าง
public class Puppy {
public Puppy() {
}
public Puppy(String name) {
// This constructor has one parameter, name.
}
}
Java ยังรองรับSingleton Classesซึ่งคุณจะสามารถสร้างคลาสได้เพียงอินสแตนซ์เดียว
Note- เรามีผู้สร้างสองประเภทที่แตกต่างกัน เราจะพูดถึงผู้สร้างโดยละเอียดในบทต่อ ๆ ไป
การสร้างวัตถุ
ดังที่ได้กล่าวไว้ก่อนหน้านี้คลาสจัดเตรียมพิมพ์เขียวสำหรับวัตถุ โดยพื้นฐานแล้ววัตถุถูกสร้างขึ้นจากคลาส ใน Java คีย์เวิร์ดใหม่ถูกใช้เพื่อสร้างอ็อบเจ็กต์ใหม่
มีสามขั้นตอนในการสร้างวัตถุจากคลาส -
Declaration - การประกาศตัวแปรด้วยชื่อตัวแปรที่มีประเภทออบเจ็กต์
Instantiation - คำหลัก 'ใหม่' ใช้เพื่อสร้างวัตถุ
Initialization- คำหลัก 'ใหม่' ตามด้วยการเรียกไปยังผู้สร้าง สายนี้เริ่มต้นวัตถุใหม่
ต่อไปนี้เป็นตัวอย่างการสร้างวัตถุ -
ตัวอย่าง
public class Puppy {
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Passed Name is :" + name );
}
public static void main(String []args) {
// Following statement would create an object myPuppy
Puppy myPuppy = new Puppy( "tommy" );
}
}
หากเราคอมไพล์และรันโปรแกรมข้างต้นมันจะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Passed Name is :tommy
การเข้าถึงตัวแปรอินสแตนซ์และวิธีการ
ตัวแปรอินสแตนซ์และวิธีการเข้าถึงผ่านอ็อบเจ็กต์ที่สร้างขึ้น ในการเข้าถึงตัวแปรอินสแตนซ์ต่อไปนี้คือพา ธ แบบเต็ม -
/* First create an object */
ObjectReference = new Constructor();
/* Now call a variable as follows */
ObjectReference.variableName;
/* Now you can call a class method as follows */
ObjectReference.MethodName();
ตัวอย่าง
ตัวอย่างนี้อธิบายวิธีเข้าถึงตัวแปรอินสแตนซ์และวิธีการของคลาส
public class Puppy {
int puppyAge;
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Name chosen is :" + name );
}
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
System.out.println("Puppy's age is :" + puppyAge );
return puppyAge;
}
public static void main(String []args) {
/* Object creation */
Puppy myPuppy = new Puppy( "tommy" );
/* Call class method to set puppy's age */
myPuppy.setAge( 2 );
/* Call another class method to get puppy's age */
myPuppy.getAge( );
/* You can access instance variable as follows as well */
System.out.println("Variable Value :" + myPuppy.puppyAge );
}
}
หากเราคอมไพล์และรันโปรแกรมข้างต้นมันจะให้ผลลัพธ์ดังต่อไปนี้ -
เอาต์พุต
Name chosen is :tommy
Puppy's age is :2
Variable Value :2
กฎการประกาศไฟล์ต้นฉบับ
ในส่วนสุดท้ายของส่วนนี้ตอนนี้เรามาดูกฎการประกาศไฟล์ต้นฉบับกัน กฎเหล่านี้จำเป็นอย่างยิ่งเมื่อประกาศคลาสคำสั่งนำเข้าและคำสั่งแพ็กเกจในไฟล์ต้นฉบับ
สามารถมีคลาสสาธารณะได้เพียงหนึ่งคลาสต่อไฟล์ต้นทาง
ซอร์สไฟล์สามารถมีคลาสที่ไม่เป็นสาธารณะได้หลายคลาส
ชื่อคลาสสาธารณะควรเป็นชื่อของซอร์สไฟล์เช่นกันซึ่งควรต่อท้ายด้วย .javaในตอนท้าย ตัวอย่างเช่นชื่อคลาสเป็นคลาสสาธารณะ Employee {}ดังนั้นซอร์สไฟล์ควรเป็น Employee.java
ถ้าคลาสถูกกำหนดไว้ภายในแพ็กเกจคำสั่งแพ็กเกจควรเป็นคำสั่งแรกในไฟล์ต้นทาง
หากมีคำสั่งนำเข้าจะต้องเขียนระหว่างคำสั่งแพ็กเกจและการประกาศคลาส หากไม่มีคำสั่งแพ็กเกจคำสั่งนำเข้าควรเป็นบรรทัดแรกในไฟล์ต้นฉบับ
คำสั่งอิมพอร์ตและแพ็กเกจจะบ่งบอกถึงคลาสทั้งหมดที่มีอยู่ในซอร์สไฟล์ เป็นไปไม่ได้ที่จะประกาศคำสั่งการนำเข้าและ / หรือแพ็กเกจที่แตกต่างกันไปยังคลาสต่างๆในไฟล์ต้นทาง
ชั้นเรียนมีระดับการเข้าถึงหลายระดับและมีชั้นเรียนหลายประเภท คลาสนามธรรมคลาสสุดท้าย ฯลฯ เราจะอธิบายเกี่ยวกับสิ่งเหล่านี้ทั้งหมดในบทตัวปรับการเข้าถึง
นอกเหนือจากคลาสประเภทที่กล่าวมาแล้ว Java ยังมีคลาสพิเศษบางคลาสที่เรียกว่าคลาสภายในและคลาส Anonymous
แพ็คเกจ Java
พูดง่ายๆก็คือวิธีการจัดหมวดหมู่คลาสและอินเทอร์เฟซ เมื่อพัฒนาแอปพลิเคชันใน Java จะมีการเขียนคลาสและอินเทอร์เฟซหลายร้อยรายการดังนั้นการจัดหมวดหมู่คลาสเหล่านี้จึงเป็นสิ่งที่จำเป็นและทำให้ชีวิตง่ายขึ้นมาก
นำเข้างบ
ใน Java หากมีการกำหนดชื่อแบบเต็มซึ่งรวมถึงแพ็กเกจและชื่อคลาสคอมไพเลอร์จะสามารถค้นหาซอร์สโค้ดหรือคลาสได้อย่างง่ายดาย คำสั่งนำเข้าเป็นวิธีการให้ตำแหน่งที่เหมาะสมสำหรับคอมไพเลอร์เพื่อค้นหาคลาสนั้น ๆ
ตัวอย่างเช่นบรรทัดต่อไปนี้จะขอให้คอมไพลเลอร์โหลดคลาสทั้งหมดที่มีอยู่ในไดเร็กทอรี java_installation / java / io -
import java.io.*;
กรณีศึกษาง่ายๆ
สำหรับกรณีศึกษาของเราเราจะสร้างสองคลาส พวกเขาคือ Employee และ EmployeeTest
เปิดแผ่นจดบันทึกก่อนแล้วเพิ่มรหัสต่อไปนี้ จำไว้ว่านี่คือคลาสพนักงานและคลาสนี้เป็นคลาสสาธารณะ ตอนนี้บันทึกไฟล์ต้นฉบับนี้ด้วยชื่อ Employee.java
คลาสพนักงานมีตัวแปรเช่นชื่ออายุการกำหนดและเงินเดือน คลาสมีคอนสตรัคเตอร์ที่กำหนดไว้อย่างชัดเจนหนึ่งตัวซึ่งรับพารามิเตอร์
ตัวอย่าง
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
// This is the constructor of the class Employee
public Employee(String name) {
this.name = name;
}
// Assign the age of the Employee to the variable age.
public void empAge(int empAge) {
age = empAge;
}
/* Assign the designation to the variable designation.*/
public void empDesignation(String empDesig) {
designation = empDesig;
}
/* Assign the salary to the variable salary.*/
public void empSalary(double empSalary) {
salary = empSalary;
}
/* Print the Employee details */
public void printEmployee() {
System.out.println("Name:"+ name );
System.out.println("Age:" + age );
System.out.println("Designation:" + designation );
System.out.println("Salary:" + salary);
}
}
ดังที่ได้กล่าวไว้ก่อนหน้านี้ในบทช่วยสอนนี้การประมวลผลเริ่มต้นจากวิธีการหลัก ดังนั้นเพื่อให้เราสามารถเรียกใช้คลาส Employee นี้ควรมีวิธีการหลักและควรสร้างวัตถุ เราจะสร้างคลาสแยกสำหรับงานเหล่านี้
ต่อไปนี้คือคลาสEmployeeTestซึ่งสร้างสองอินสแตนซ์ของคลาส Employee และเรียกใช้เมธอดสำหรับแต่ละอ็อบเจ็กต์เพื่อกำหนดค่าสำหรับตัวแปรแต่ละตัว
บันทึกรหัสต่อไปนี้ในไฟล์ EmployeeTest.java
import java.io.*;
public class EmployeeTest {
public static void main(String args[]) {
/* Create two objects using constructor */
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
// Invoking methods for each object created
empOne.empAge(26);
empOne.empDesignation("Senior Software Engineer");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
ตอนนี้รวบรวมทั้งสองคลาสแล้วเรียกใช้EmployeeTestเพื่อดูผลลัพธ์ดังนี้ -
เอาต์พุต
C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0
Next คืออะไร?
ในเซสชันถัดไปเราจะพูดถึงประเภทข้อมูลพื้นฐานใน Java และวิธีใช้เมื่อพัฒนาแอปพลิเคชัน Java