Java类和对象
类Class表示面向对象编程的基本原则。类是抽象概念、故事、蓝图,描述:
**一个物体的特征和属性;**它们代表了物体所知道的,它是什么;
对象方法:它们表示对象知道做什么,它的行为;
基于类,程序员可以定义一些具体的对象。因此,通过实例化类(在类中定义的属性用值初始化)可以获得对象类型变量。对于那些有C编程知识的人来说,类可以被看作是由struct定义的结构,在这个结构中我们还可以定义方法。
面向对象编程描述了一种方法,通过这种方法,软件应用程序可以分解为表示为解决较小问题而开发的组件的对象。面向对象编程的目标是将复杂的解决方案分解为更容易管理的较小的问题(类)。其他面向对象编程概念(将在单独的帖子中详细介绍):
封装(encapsulation)–隐藏类的大部分内部实现;对象属性不能直接访问,只能通过接口(函数集合)访问;关于方法,在类之外,只知道类做什么,但是类的用户不知道它是如何实现的,他不能更改解决方案;
派生/继承(derivation/inheritance)——允许在不改变现有类的基础上进一步开发现有类并构建新的解决方案;在C中,管理复杂解决方案存在实际问题,因为我们有两个独立的实体、函数和结构,每次你需要改变一些东西时,这些都会影响到现有解决方案的主要部分;
多态性(polymorphism)——允许在同一名称下实现不同的解决方案(方法)。
如何在Java中定义类
Java 6中用于定义类的语法是:
[access_modifier] class class_name [extends base_class] [implements interface1, interface2, …] { //类代码块的开始 //属性 //方法 //初始化代码块 //其他类 }//类代码块的结束
其中:
- access modifier——描述Java程序对类的访问权限;该属性是可选的,默认值为private;访问修饰符可能的值:public——就安全性而言,这个类可以在Java中的任何地方使用; protected和 private
- class——在Java中定义这个结构的关键字;
- class_name——程序员定义的类名,类名必须遵循相同的命名约定和任何变量
- extends——允许从基类派生
- implements-允许从一个或多个接口派生
定义一个类,最简单语法是:
class class_name {//类代码块的开始 //属性 //方法 //初始化代码块 //其他类 }//类代码块的结束
我们可以在类中定义的属性:
- 对象的实例变量或属性;
- 静态变量——一种“全局变量”。
我们可以在类中定义的方法(函数):
- 构造函数方法;(constructor)
- 访问函数(get和set);
- 处理方法;
对于属性和方法的声明,没有如何定义它们的规则,但是如果对代码和属性进行分组定义,则代码管理更容易。
如何定义类的一些规则:
- 在Java文件 .Java中可以定义多个类;
- 在Java文件中,只能定义一个公共类;
- 包含公共类的Java源文件与公共类同名(区分大小写)Book.java要包含公共类 Book;
- 类的代码块由
{
和}
定义; - 如果在源文件 .java中定义了多个类,那么通过编译源文件,会为每个类生成字节码文件 .class。
基于简单的语法,我们定义了一个简单的Java类来描述一本书。这本书由其属性 price, title和 author来描述,行为由其方法 getPret()和display()来定义
class Book{ //define attributes - instance variables float price; String title; String author; //define methods public float getPrice(){ return price; } public String display(){ return "The book "+titlu+" has as author "+author; } }
如何构造对象
如果类表示抽象的东西,那么对象表示真实的东西。
对象是类的实例,因为对象类构造背后的故事变得真实:堆中的空间内存,其中实例属性具有值。
对象由 new运算符构造,该运算符将调用类构造函数(带或者不带参数)。
为了测试前面定义的类Book,我们使用了一个新的公共类 TestBook(Java文件也被称为TestBook.java):
public class TestBook { public static void main(String[] args) { //define references Book book1; //are valoarea null Book book2 = null; //create objects book1 = new Book(); book2 = new Book(); } }
表示引用(指针)的对象变量管理堆通过这个地址我们可以访问为对象保留的内存区域。在这个区域中,我们可以找到它的属性值。
通过定义一个简单的类变量,可以得到一个默认值为null的引用。要给这个引用赋值,必须使用new构建(实例化)对象。
如何访问对象方法和属性
对象可以通过.(点)运算符访问其属性和方法。
对类外部的对象属性和方法的访问,就像前面的例子中在TestBook类中使用的对象一样,可以通过访问修饰符(public、private、protected)控制,这些修饰符将在另一篇文章中详细分析)。
public class TestBook { public static void main(String[] args) { Book book1 = new Carte(); book1.price = 23; book1.title = "C++"; book1.author = "Hyman"; System.out.println(book1.display()); Book book2 = new Carte(); book2.price = 35; book2.title = "Java"; book2.author = "Tom"; System.out.println(book2.display()); } }