1、类(Class):
- 定义对象的蓝图,包括属性和方法。
- 示例:
public class Car { ... }
2、对象(Object):
- 类的实例,具有状态和行为。
- 示例:
Car myCar = new Car();
3、继承(Inheritance):
- 一个类可以继承另一个类的属性和方法。
- 示例:
public class Dog extends Animal { ... }
4、封装(Encapsulation):
- 将对象的状态(字段)私有化,通过公共方法访问。
- 示例:
private String name; public String getName() { return name; }
5、多态(Polymorphism):
- 对象可以表现为多种形态,主要通过方法重载和方法重写实现。
- 示例:
- 方法重载:
public int add(int a, int b) { ... }
和public double add(double a, double b) { ... }
- 方法重写:
@Override public void makeSound() { System.out.println("Meow"); }
- 方法重载:
6、抽象(Abstraction):
- 使用抽象类和接口来定义必须实现的方法,不提供具体实现。
- 示例:
- 抽象类:
public abstract class Shape { abstract void draw(); }
- 接口:
public interface Animal { void eat(); }
- 抽象类:
7、接口(Interface):
- 定义类必须实现的方法,支持多重继承。
- 示例:
public interface Drivable { void drive(); }
8、方法(Method):
- 定义类的行为,包含在类中的函数。
- 示例:
public void displayInfo() { System.out.println("Info"); }
9、方法重载(Method Overloading):
下面是一个创建对象的例子:
public class Puppy{ public Puppy(String name){ //这个构造器仅有一个参数:name System.out.println("小狗的名字是 : " + name ); } public static void main(String[] args){ // 下面的语句将创建一个Puppy对象 Puppy myPuppy = new Puppy( "tommy" ); } }
编译并运行上面的程序,会打印出下面的结果:
小狗的名字是 : tommy
- 同一个类中可以有多个同名的方法,但参数不同。
- 示例:
public class MathUtils { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } }
-
创建对象
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
访问实例变量和方法
通过已创建的对象来访问成员变量和成员方法,如下所示:
/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();
Java 包
包主要用来对类和接口进行分类。当开发 Java 程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。
import 语句
在 Java 中,如果给出一个完整的限定名,包括包名、类名,那么 Java 编译器就可以很容易地定位到源代码或者类。import 语句就是用来提供一个合理的路径,使得编译器可以找到某个类。
例如,下面的命令行将会命令编译器载入 java_installation/java/io 路径下的所有类
import java.io.*;
一个简单的例子
在该例子中,我们创建两个类:Employee 和 EmployeeTest。
首先打开代码编辑器,把下面的代码粘贴进去,将文件保存为 Employee.java。
Employee 类有四个成员变量:name、age、designation 和 salary,该类显式声明了一个构造方法,该方法只有一个参数。
Employee.java 文件代码:
import java.io.*;
public class Employee {
private String name;
private int age;
private String designation;
private double salary;
// Employee 类的构造器
public Employee(String name) {
this.name = name;
}
// 设置 age 的值
public void setAge(int age) {
this.age = age;
}
// 获取 age 的值
public int getAge() {
return age;
}
// 设置 designation 的值
public void setDesignation(String designation) {
this.designation = designation;
}
// 获取 designation 的值
public String getDesignation() {
return designation;
}
// 设置 salary 的值
public void setSalary(double salary) {
this.salary = salary;
}
// 获取 salary 的值
public double getSalary() {
return salary;
}
// 打印信息
public void printEmployee() {
System.out.println(this);
}
// 重写 toString 方法
@Override
public String toString() {
return "名字: " + name + "\n" +
"年龄: " + age + "\n" +
"职位: " + designation + "\n" +
"薪水: " + salary;
}
}
System.out.println(this);java会自动调用 this 的 toString() 方法,重写了toString()之后,那么 this 在调用 toString() 方法的时候,会优先调用自己类里的 toString() 方法。
Java 程序都是从 main 方法开始执行,为了能运行这个程序,必须包含 main 方法并且创建一个实例对象。
下面给出 EmployeeTest 类,该类实例化 2 个 Employee 类的实例,并调用方法设置变量的值。
将下面的代码保存在 EmployeeTest.java文件中。
import java.io.*;
public class EmployeeTest {
public static void main(String[] args) {
// 使用构造器创建两个对象
Employee empOne = new Employee("RUNOOB1");
Employee empTwo = new Employee("RUNOOB2");
// 调用这两个对象的成员方法
empOne.setAge(26);
empOne.setDesignation("高级程序员");
empOne.setSalary(1000);
empOne.printEmployee();
empTwo.setAge(21);
empTwo.setDesignation("菜鸟程序员");
empTwo.setSalary(500);
empTwo.printEmployee();
}
}
编译这两个文件并且运行 EmployeeTest 类,可以看到如下结果:
$ javac EmployeeTest.java $ java EmployeeTest 名字:RUNOOB1 年龄:26 职位:高级程序员 薪水:1000.0 名字:RUNOOB2 年龄:21 职位:菜鸟程序员 薪水:500.0