(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)
目录
一、面向对象语言的三大特性
面向对象的语言有三个特性: 封装性; 继承性; 多态性;
封装性(encapsulation)
封装是指把数据和函数绑定到一个容器或者对象中。这一概念也称为数据抽象(data abstraction),它支持数据隐藏(data hiding),就是说对象可以对程序的其他部分隐藏其数据,使数据不能被直接访问,而只可以通过接口函数访问。 封装减少了意外数据修改和逻辑错误发生的可能性
继承性(inheritance)
继承机制是为了支持代码的可重用性(reusability)。定义新的类,可以从已有的类中继承代码,减少了程序的总代码量和写代码时间,缩短了开发周期。 例如,已经定义了三角形类Triangle,则定义直角三角形Rtriangle可以继承Triangle中的数据和方法,再添加新的数据和方法,即实现了代码的重用。 生活中继承的情况比比皆是。建筑设计部门开始一个新楼设计时可能从一个过去的设计承一些风格、结构思路。修改增补之后得到一个新设计。
多态性(polymorphism)
多态性类似自然语言的一词多义现象,比如汉字“打”,用在不同上下文中含义不同。“打酱油”是买酱油,“打苹果”是削苹果皮,“打牌”是玩牌,“打车”则是租车。 面向对象语言中的多态性也是为了用单一的接口形式,表达多种不同的动作。 Java中有方法重载(method overloading)和方法重写(method overriding)两种多态。
二、类的定义
在面向对象的思想中,最核心的就是对象。
为了在程序中创建对象,首先需要定义一个类。
类是对象的抽象,它用于描述一组对象的共同特征和行为,例如人都有姓名、年龄、性别等特征,还有学习、工作、购物等行为。
以面向对象的编程思想,就可以将某一类中共同的特征和行为封装起来,把共同特征作为类的属性(也叫成员变量),把共同行为作为类的方法(也叫成员方法)。
1.类的定义格式
2.声明(定义)成员变量
private String name; // 声明一个String类型的name;
private int age = 20; // 定义一个int类型的age,并赋值为20;
3.声明(定义)成员方法
在Java中,定义在类中的变量被称为成员变量,定义在方法中的变量被称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时方法中通过变量名访问到的是局部变量,而并非成员变量。
public class Person { int age = 10; // 类中定义的变量被称作成员变量 void speak() { int age = 30; // 方法内部定义的变量被称作局部变量 System.out.println("我今年" + age + "岁了!"); } }
分析:上面的代码中,speak()方法中所访问的变量age,就是局部变量,也就
是说,当有另外一个程序来调用speak()方法时,输出的值为30,而不是10。
三、对象的创建与使用
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
声明:声明一个对象,包括对象名称和对象类型。
实例化:使用关键字new来创建一个对象。
初始化:使用new创建对象时,会调用构造方法初始化对象。
public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数:name
System.out.println("Passed Name is :" + name );
}
public static void main(String []args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy( "tommy" );
}
}
运行结果为:
Passed Name is :tommy
访问实例变量和方法
通过已创建的对象来访问成员变量和成员方法,如下所示:
/* 实例化对象 */ ObjectReference = new Constructor(); /* 访问其中的变量 */ ObjectReference.variableName; /* 访问类中的方法 */ ObjectReference.MethodName();
下面的例子展示如何访问实例变量和调用成员方法:
public class Puppy{ int puppyAge; public Puppy(String name){ // 这个构造器仅有一个参数:name System.out.println("Passed Name is :" + name ); } public void setAge( int age ){ puppyAge = age; } public int getAge( ){ System.out.println("Puppy's age is :" + puppyAge ); return puppyAge; } public static void main(String []args){ /* 创建对象 */ Puppy myPuppy = new Puppy( "tommy" ); /* 通过方法来设定age */ myPuppy.setAge( 2 ); /* 调用另一个方法获取age */ myPuppy.getAge( ); /*你也可以像下面这样访问成员变量 */ System.out.println("Variable Value :" + myPuppy.puppyAge ); } }
编译并运行上面的程序,产生如下结果:
Passed Name is :tommy Puppy's age is :2 Variable Value :2
四、类的封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
让我们来看一个java封装类的例子:
/* 文件名: EncapTest.java */ public class EncapTest{ private String name; private String idNum; private int age; public int getAge(){ return age; } public String getName(){ return name; } public String getIdNum(){ return idNum; } public void setAge( int newAge){ age = newAge; } public void setName(String newName){ name = newName; } public void setIdNum( String newId){ idNum = newId; } }
以上实例中public方法是外部类访问该类成员变量的入口。
通常情况下,这些方法被称为getter和setter方法。
因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。
通过如下的例子说明EncapTest类的变量怎样被访问:
/* F文件名 : RunEncap.java */ public class RunEncap{ public static void main(String args[]){ EncapTest encap = new EncapTest(); encap.setName("James"); encap.setAge(20); encap.setIdNum("12343ms"); System.out.print("Name : " + encap.getName()+ " Age : "+ encap.getAge()); } }
以上代码编译运行结果如下:
Name : James Age : 20