d) Chương trình ứng dụn gở dạng Applet lẫn dạng độc lập
4.2 Định nghĩa hàm thành phần
Hành vi của các đối tượng của một lớp được xác định bởi các hàm thành phần của lớp đó. Cú pháp để định nghĩa các hàm có dạng tổng quát:
[Kiểm soát truy nhập] <Kiểu trả lại> <Tên hàm> ([<DS tham biến hình thức>]) [<Mệnh đề thows>]
{
<Nội dung của hàm> }
<Kiểu trả lại> có thể là kiểu nguyên thủy, kiểu lớp hoặc không có giá trị trả lại (kiểu void).
<Danh sách tham biến hình thức> bao gồm dãy các tham biến (kiểu và tên) phân cách với nhau bởi dấu phẩy.
Ví dụ 4.1 //Tập tin Demo.java
public class Demo {
public static void main(String[] args) {
if (args.length == 0) return; // Ham kieu void co the su dung lenh return output(args.length);
}
static void output(int value)
{ System.out.println(checkValue (value)); }
static int checkValue(int i) //Ham khac kieu void phai su dung lenh return de tra lai gia tri
{ if(i<3) return 1; else return 2; }}
4.2.1Nạp chồng các hàm thành phần
Mỗi hàm đều có phần định danh hàm, bao gồm tên của hàm, kiểu trả lại giá trị và danh sách các tham số. Trong lập trình hướng đối tượng cho phép sử dụng cùng một tên hàm nhưng định nghĩa nhiều nội dung thực hiện khác nhau. Những hàm như thế được gọi là hàm nạp chồng (overloading) hay hàm tải bội (quá tải hàm).
Lưu ý: Cơ chế nạp chồng cho phép một hàm có cùng một tên gọi nhưng danh
sách tham biến khác nhau. Do vậy, sẽ có các định danh khác nhau. Những hàm được nạp chồng với các định danh khác nhau có các thành phần cài đặt thực hiện khác nhau và có kiểu trả lại khác nhau.
Ví dụ: Lớp java.lang.Math có hàm nạp chồng min() xác định giá trị cực tiểu của 2 số:
public static double min(double a, double b) public static float min(float a, float b)
public static int min(int a, int b) public static long min(long a, long b)
Cũng cần lưu ý là danh sách tham biến của các hàm nạp chồng phải khác nhau về số lượng hoặc về thứ tự các kiểu của các tham biến.
Ví dụ:
public void methodA(int a, double b){/*…*/} //(1)
public int methodA(int a){return a;} //(2)
public int methodA(){return 1;} //(3)
public long methodA(double a, int b){return a*b;} //(4)
public long methodA(int a, double b){return a;} // (5) sai, giống (1)