Java是一種面向對象的編程語言,類是其最基本的概念之一。類可以看作是對一組對象進行抽象的模板,其中包括類的屬性和方法。在Java中,類可以分為普通類和抽象類兩種。
普通類是一種完整的類,其中定義了所有的屬性和方法。這些方法都有具體的實現代碼,可以直接被調用使用。例如下面代碼中的Person類:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void sayHello() {
System.out.println("Hello, my name is " + name + ", I am " + age + " years old.");
}
}
在上述代碼中,Person類定義了兩個屬性name和age,以及一個方法sayHello。方法sayHello的具體實現是輸出一句問候語,并將類的屬性作為參數傳遞進去。這樣,任何一個具體的人對象(即Person的實例)都可以調用sayHello方法,并輸出自己的姓名和年齡。
抽象類和普通類的不同之處在于,抽象類中含有抽象方法。抽象方法是一種定義了方法名稱、參數列表和返回類型的方法,但沒有具體實現代碼的方法。抽象方法的存在意義在于,讓子類實現該方法并覆蓋其具體的實現。例如下面代碼中的Animal類:
public abstract class Animal {
public abstract void run();
}
在上述代碼中,Animal類是一個抽象類,其中定義了一個抽象方法run。這個方法沒有實現代碼,只是一個提供接口的方法。任何一個繼承自Animal類的子類都必須實現這個抽象方法。例如,如果我們有一個Dog類,那么它就必須實現run方法,例如:
public class Dog extends Animal {
public void run() {
System.out.println("I'm a dog, I'm running.");
}
}
在上述代碼中,Dog類繼承了Animal類,并實現了其抽象方法run。具體實現是輸出一句話,說明自己是一只狗,正在奔跑。同樣的,如果有一個Cat類,那么它也必須實現run方法,并自行實現其具體的代碼。
可以看出,抽象類具有更高的抽象程度,它只定義了一個接口,而不關注其具體實現。這使得抽象類可以統一不同的子類,并且保持代碼的靈活性和擴展性。但是,因為抽象類中含有抽象方法,所以無法直接實例化抽象類,必須通過實例化其子類并覆蓋其抽象方法來完成對象的創建。