面向对象编程工作原理
在面向对象程编程中,对象包含两项内容:属性和行为。属性描术对象并使其不同于其他对象,而行为指的是对象能做什么。
什么是对象
对象是通过将对象类作为模板来创建的,关键字public表示这个类是公有的;
对象的变量通常称为实例变量或成员变量。
理解继承
OOP的一个最大优点是继承,它允许一个对象继承另外一个对象的行为和属性。
通过继承,程序员只需定义新类与现有类的不同之处,就能够创建一个新类。要继承其他类,可使用extend语句。
1 public class Modem { 2 int speed; 3 4 public void displaySpeed() { 5 System.out.println(speed); 6 } 7 } 8 9 public class ErrorCorrectionModem extends Modem { 10 11 }
建立继承层次
通过继承,无须做大量重复的工作就可以开发大量相关的类,它使得代码可以从一个类传递给另一个类,再传递给其他类。类的这种组织结构称为层次,在JAVA程序中使用的标准类都属于同一个类层次。从其他类继承而来的类称为子类,被继承的类称为超类。
转换对象和简单变量
将信息转换为另一种类型称为类型转换。
对于简单变量,最常见的是在数值之间进行类型转换,如整数和浮点数之间。有一种类型的变量不能进行类型转换,这就是布尔值。
1)简单变量的类型转换
要将信息转换为一种新类型,可以在变量前指定新类型,并将其用括号括起。
float source = 7.06F; int destination = (int) source;
在类型转换中,如果目标类型的取值范围比源类型大,转换将很容易,如将byte值转换为int值。byte的取值范围为-128~127,而int的取值范围为-2.1*109~2.1*109。无论byte变量存储的什么值,新的int变量都有足够的空间存储它。
有时不用进行类型转换就可使用类型不同的变量,例如,char变量可直接用作int变量,int变量可直接用作long变量,而任何数值变量都可直接用作double变量。
在大多数情况下,由于目标类型的取值范围大于源类型,转换时不会修改信息。特例是将int或long变量转换为float变量,以及将long变量转换为double变量。
要从取值范围大的类型转换为取值范围小的类型,必须显式地进行转换。
如: 1 int xNum =44; 2 byte val = (byte)xNum;
2)对象类型转换
当源对象和目标对象存在继承关系时,就可以在它们之间进行类型转换,其中一个类必须是另一个类的子类。
有些对象根本不需要转换。可在任何需要超类的地方使用类对象。JAVA中的所有对象都是Object类的子类,因此可在任何需要Object的地方使用任何对象。
3)在简单变量对象之间进行转换
不能在对象和简单变量之间进行类型转换。在JAVA中,每一个简单的变量类型都有很多类,比如Boolean、Byte、Character、Double、Float、Integer、Long和Short等。这些类名的首字母都是大写的,因为它们是对象,而不是简单的变量类型。
最常见的在对象和变量之间进行的转换是将字符串作为数值使用。为此,可以使用Integer类的parseInt()方法, 如:


String count = "25"; int myCount = Integer.parseInt(count);
4)自动封装和拆装
在JAVA中,每一种基本的数据类型都有对应的对象类:boolean对Boolean类,byte对应Byte类,char对应Character类,double对应Double类,float对应Float类,int对应Integer类,long对应Long类,short对应Short类。
在每种基本类型及其对应的类中,可存储的值是相同的,唯一的差别是信息的格式。
JAVA的自动封装和拆装功能使得可以互换地使用基本数据类型及其对应的对象格式。
自动封装功能将简单变量转换为相对应的类。
拆装功能将对象转换为相对应的简单变量值。
创建对象
1 public class ModemTester { 2 public static void main(String[] arguments) { 3 CableModem surfBoard = new CableModem(); 4 DslModem gateway = new DslModem(); 5 surfBoard.speed = 500000; 6 gateway.speed = 400000; 7 System.out.println("Trying the cable modem:"); 8 surfBoard.displaySpeed(); 9 surfBoard.connect(); 10 System.out.println("Trying the DSL modem:"); 11 gateway.displaySpeed(); 12 gateway.connect(); 13 } 14 }
问与答
一个类可以继承多个类吗?
答:这在有些编程语言中(比如C++)是可以的,但在JAVA中不行。多继承是一项功能强大的特性,但也使得面向对象编程更难学习和使用。java的开发者决定对继承进行限制,即任何类只能有一个超类,虽然同一个类可以有多个子类。一种补偿这种限制的方式是,可以从名为接口的这种特殊类继承方法。