目录
一、Java普通类
Java的普通类是指非抽象类、非枚举类、非接口类,即最为普遍的一种类。通常情况下,我们在Java程序中定义的类都是普通类。
普通类可以包含多个成员变量和方法,并且可以通过关键字new
来创建类的对象实例。我们可以在类的内部或外部访问和调用成员变量和方法,也可以继承其他类或者实现接口。
与抽象类和接口不同,普通类可以有自己的具体实现,不需要强制子类去实现抽象方法。因此,在设计程序时,我们可以根据实际情况来选择使用普通类、抽象类或接口。
总之,Java的普通类是最为常见的一种类,它可以拥有自己的属性和方法,并且可以被其他类继承和使用。
以下是一个简单的Java普通类样例,它包含了一些成员变量和方法:
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 + " and I'm " + age + " years old.");
}
// 定义Getter和Setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这个类名为Person
,它包含两个私有成员变量name
和age
,分别表示人的姓名和年龄。这个类还定义了一个构造方法,用来对成员变量进行初始化。同时,该类还定义了一个成员方法sayHello()
,用来输出自我介绍。
在这个类中,还定义了4个Getter和Setter方法,用来获取和设置成员变量的值。这些方法可以帮助我们封装类的内部实现,保证了程序的安全性和灵活性。
总之,这个类是一个简单的Java普通类样例,它包含了成员变量、构造方法、成员方法和Getter/Setter方法等。这些特性使得Java类具有了良好的封装性、可扩展性和可维护性。
二、Java抽象类
Java的抽象类是一种不能被实例化的类,它需要子类去继承并实现其中的抽象方法。在Java中,我们可以使用关键字abstract
来定义一个抽象类,抽象类可以包含抽象方法、非抽象方法和成员变量等。
抽象类与普通类的区别在于,抽象类中至少包含一个或多个抽象方法,并且抽象方法没有具体的实现。因为抽象类不能直接被实例化,所以我们必须通过继承抽象类来实现其抽象方法,并且在子类中重写抽象方法并给出具体实现。
抽象类的主要作用是提供一组规范,规定了子类必须去实现的一些方法和属性等,同时也保证了程序的可扩展性和可维护性。抽象类还可以作为接口和具体类之间的中间件,帮助我们实现代码的复用和封装。
总之,Java的抽象类是一种非常重要的特性,它允许我们定义一组规范,规定了子类必须去实现的一些方法和属性等,并且保证了程序的可扩展性和可维护性。
以下是一个Java抽象类的样例:
public abstract class Animal {
protected String name;
protected int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public abstract void sound();
public void introduce() {
System.out.println("My name is " + name + ", I am " + age + " years old.");
}
}
这个示例中,我们定义了一个抽象类Animal
,其中包含了两个成员变量name
和age
以及两个方法sound()
和introduce()
。sound()
方法被声明为抽象方法,它没有具体的实现,而introduce()
方法则有具体的实现,可以被子类继承并重写。
由于Animal
是一个抽象类,所以我们无法直接创建它的实例。如果想要使用Animal
,需要通过继承它并实现sound()
方法来创建子类,并在子类中实现具体功能。
例如,下面是一个继承Animal
类的子类Dog
:
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age); // 调用父类构造函数
}
@Override
public void sound() {
System.out.println("Wang Wang");
}
}
Dog
类继承了Animal
类,并实现了sound()
方法,给出了具体的实现。我们可以在程序中创建Dog
对象,并调用其introduce()
和sound()
方法:
Dog dog = new Dog("Tom", 3);
dog.introduce(); // 输出:"My name is Tom, I am 3 years old."
dog.sound(); // 输出:"Wang Wang"
这个例子展示了抽象类的基本用法,它可以定义一组规范并要求子类去实现其中的抽象方法。
三、Java普通类和抽象类有哪些区别?
Java普通类和抽象类的主要区别如下:
-
实例化:普通类可以被实例化,而抽象类不能被直接实例化。
-
抽象方法:普通类中不会包含抽象方法(只有具体实现),而抽象类中必须至少包含一个抽象方法。抽象方法是没有具体实现的方法,它只有方法的声明,而没有方法体。
-
继承:普通类可以被其他普通类继承,也可以被抽象类继承,而抽象类只能被其他类继承。
-
特征:普通类用于描述一些具体对象的行为和属性,而抽象类则更多地用于描述一些概念上的特征和规范。抽象类通常是对一组相关类进行抽象,提取出它们共有的特征和行为,以便于让这些类更加易于维护和扩展。
-
方法实现:普通类中的所有方法都必须有具体的实现,而抽象类中可以包含普通方法和抽象方法。普通方法在抽象类中的实现方式与普通类相同,而抽象方法则不需要实现,需要由子类去实现。
总之,普通类和抽象类都是Java中的类,它们之间的区别主要在实例化、抽象方法、继承、特征和方法实现等方面。我们需要根据具体情况选择使用哪种类型的类来实现程序的功能。