Java面向对象编程之 类和对象 | Java OOP Class and Object
Made by Mike_Zhang
Java主题:
OOP Introduction
请阅读本博客的Java面向对象编程详细介绍 - Java OOP Detailed Introduction
类的属性和方法
1. 类的属性 (Field)
类的属性又称为成员变量, 英文为Field. 以下代码构造了一个Book类, Book为类的名称, 设置了两个属性, 字符串类的name, 用于存储书名, 以及整数类型的page, 用于存储页数. 属性可以设置初始值, 如不设置初始值, 则会有默认值.
1 |
|
2. 类的方法 (Method)
类的方法又称为成员方法, 英文为Method.
1 |
|
以上代码给Book类添加了两个方法.
第一个方法setName为设置Book类的name属性, 即给书本一个名字. public为权限修饰符, public表示此方法可以被本类, 子类以及其他包中的类使用, 理解为公开的. void表示此方法无返回值, 理解为表示返回值为空. setName为方法的名称. 括号中的inName是方法的参数(parameter), String表明了参数的数据类型. name = inName; 表示把对象的name属性设置为setName中的参数inName, 例如:
1 |
|
第二个方法getName为获取并输出书的名字, String表示此方法有返回值, 并且返回值为字符串类型. return name; 表示返回对象的name属性, 例如:
1 |
|
当一个类中有多个相同名字的方法,则被称为方法重载。根据 方法名 和 参数类型(数量、类型以及排列顺序) 来判断是否能重载。参数的类型、返回值类型并不会被考虑。例如:
1 |
|
当以上某一方法被使用时,编译器会根据 方法名 和 参数类型(数量、类型以及排列顺序) 来调用相对应的方法。
3. 类的构造方法 (Constructor)
类的构造方法(Constructor)是一种的特殊的方法, 每次用类实例化一个对象时, 构造方法会自动调用.
构造方法有三个特性:
>构造方法的名称与类的名称相同;
>构造方法没有返回值, 但是不需要用void修饰字符;
>可含参数,但不能是this
. (点此了解this
)
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20public class Book{ // 构造名为Book的类
String name; // 构造Book类的一个属性name, 理解为书名
int page; // 构造Book类的另一个属性page, 理解为页数
Book(){ // 无参构造方法
System.out.println("成功创建一个Book类对象");
}
public Book(String initName){ // 有参构造方法
name = initName; // 有参数的构造方法, 创建对象时就设置对象name属性, 即为书名
System.out.println("成功创建一个Book类对象"); // 每当Book类创建一个实例对象, 会输出一语句
}
public void setName(String inName){ // 构造一个名为setName的方法, 用于设置Book类的name属性.
name = inName;
}
public String getName(){ // 构造一个名为getName的方法, 用于获取Book类的name属性
return name;
}
}
注:若一个类没有构造方法,在编译时编译器会自动加入一个无参的空构造方法,也会在对象创建时被调用。但是如果只定义了有参构造方法,在创建对象时调用无参构造方法是不合法的,例如:
1 |
|
运行:
1 |
|
若一个类包括了多个构造函数,这就被称为构造函数重载 (Constructor Overloading),其在构造函数的三个特性上还有需要有不同的参数类型,例子如下:
1 |
|
在创建对象时,会根据不同的参数类型调用相对应参数类型的构造函数,实现一一对应。
权限修饰符 (Visibility Modifiers)
Java中的权限修饰符主要包括private, protected和public. 这三个权限修饰符决定了类, 类的属性和类的方法的访问范围.
private
设置为private的属性和方法只能在本类中使用, 同包其他类或子类 以及 其他包的类或子类不可使用protected
设置为protected的属性和方法只能在本类 以及 同包其他类或子类中使用, 其他包的类或子类不可使用public
设置为public的属性和方法能在本类, 同包其他类或子类 以及 其他包的类或子类中都可以使用
对象 (object)
对象(object)是某一类的实例, 有具体的属性和方法.
对象的创建
Java中通过 new 操作符号来创建对象, 语法为: 类名 对象名 = new 类名( );
每次创建一个实例, 都会调用一次类的构造方法.
1 |
|
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public class Book{ // 构造名为Book的类
String name; // 构造Book类的一个属性name, 理解为书名
int page; // 构造Book类的另一个属性page, 理解为页数
public Book(String initName){ // 构造方法
name = initName; // 有参数的构造方法, 创建对象时就设置对象name属性, 即为书名
System.out.println("成功创建一个Book类对象"); // 每当Book类创建一个实例对象, 会输出一语句
}
public void setName(String inName){ // 构造一个名为setName的方法, 用于设置Book类的name属性.
name = inName;
}
public String getName(){ // 构造一个名为getName的方法, 用于获取Book类的name属性
return name;
}
public static void main(String[] args) { // 主方法
Book mybook = new Book("My Book Name"); // 构造一个名为mybook的Book类对象, 并使用构造方法设置name属性
}
}
对象属性和行为的访问
对象属性和行为的访问结构为“对象.属性”或“对象.方法”, 例如:1
2
3mybook.name; // 获取mybook的name属性
mybook.getName(); // 获取mybook的name属性, 并返回name的值
mybook.setName("My Another Book"); // 调用mybook的成员方法, 设置name属性为“My Another Book”
例如:
1 |
|
参考
B. Eckel, Thinking in java. Upper Saddle River, N.Y. Prentice Hall, 2014.
M. Goodrich, R. Tamassia, and A. O’reilly, Data Structures and Algorithms in Java, 6th Edition. John Wiley & Sons, 2014.
写在最后
Java中OOP相关的知识是十分重要的, 会继续更新.
最后,希望大家一起交流,分享,指出问题,谢谢!
原创文章,转载请标明出处
Made by Mike_Zhang