首页 > 代码库 > 面向对象编程
面向对象编程
6. 面向对象编程
<style>html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video { margin: 0; padding: 0; border: 0 } body { font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; line-height: 1.6; color: #333; background-color: #fff; padding: 20px; max-width: 960px; margin: 0 auto } body>*:first-child { margin-top: 0 !important } body>*:last-child { margin-bottom: 0 !important } p,blockquote,ul,ol,dl,table,pre { margin: 15px 0 } h1,h2,h3,h4,h5,h6 { margin: 20px 0 10px; padding: 0; font-weight: bold } h1 tt,h1 code,h2 tt,h2 code,h3 tt,h3 code,h4 tt,h4 code,h5 tt,h5 code,h6 tt,h6 code { font-size: inherit } h1 { font-size: 28px; color: #000 } h2 { font-size: 24px; border-bottom: 1px solid #ccc; color: #000 } h3 { font-size: 18px } h4 { font-size: 16px } h5 { font-size: 14px } h6 { color: #777; font-size: 14px } body>h2:first-child,body>h1:first-child,body>h1:first-child+h2,body>h3:first-child,body>h4:first-child,body>h5:first-child,body>h6:first-child { margin-top: 0; padding-top: 0 } a:first-child h1,a:first-child h2,a:first-child h3,a:first-child h4,a:first-child h5,a:first-child h6 { margin-top: 0; padding-top: 0 } h1+p,h2+p,h3+p,h4+p,h5+p,h6+p { margin-top: 10px } a { color: #4183C4; text-decoration: none } a:hover { text-decoration: underline } ul,ol { padding-left: 30px } ul li>:first-child,ol li>:first-child,ul li ul:first-of-type,ol li ol:first-of-type,ul li ol:first-of-type,ol li ul:first-of-type { margin-top: 0px } ul ul,ul ol,ol ol,ol ul { margin-bottom: 0 } dl { padding: 0 } dl dt { font-size: 14px; font-weight: bold; font-style: italic; padding: 0; margin: 15px 0 5px } dl dt:first-child { padding: 0 } dl dt>:first-child { margin-top: 0px } dl dt>:last-child { margin-bottom: 0px } dl dd { margin: 0 0 15px; padding: 0 15px } dl dd>:first-child { margin-top: 0px } dl dd>:last-child { margin-bottom: 0px } pre,code,tt { font-size: 12px; font-family: Consolas, "Liberation Mono", Courier, monospace } code,tt { margin: 0 0px; padding: 0px 0px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8 } pre>code { margin: 0; padding: 0; white-space: pre; border: none; background: transparent } pre { background-color: #f8f8f8; border: 1px solid #ccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px } pre code,pre tt { background-color: transparent; border: none } kbd { background-color: #DDDDDD; background-image: linear-gradient(#F1F1F1, #DDDDDD); background-repeat: repeat-x; border-color: #DDDDDD #CCCCCC #CCCCCC #DDDDDD; border-style: solid; border-width: 1px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; line-height: 10px; padding: 1px 4px } blockquote { border-left: 4px solid #DDD; padding: 0 15px; color: #777 } blockquote>:first-child { margin-top: 0px } blockquote>:last-child { margin-bottom: 0px } hr { clear: both; margin: 15px 0; height: 0px; overflow: hidden; border: none; background: transparent; border-bottom: 4px solid #ddd; padding: 0 } table th { font-weight: bold } table th,table td { border: 1px solid #ccc; padding: 6px 13px } table tr { border-top: 1px solid #ccc; background-color: #fff } table tr:nth-child(2n) { background-color: #f8f8f8 } img { max-width: 100% }</style>1. 面向对象概念
阅读面对对象程序设计,回答以下问题:
1. 什么是面向对象编程
2. 什么是对象和类
3. 什么是类的封装
4. 什么是类的继承
5. 什么是类的多态
1.1 面向对象编程的概念
模拟人类的思维过程,一切皆对象
1.2 对象和类
1.2.1 对象
对象的两个要素:
-
属性:
用于描述对象静态特性(结构特性)的数据项 比如描述一个人的姓名、性别、年龄、出生日期等属性
-
方法:
用于描述对象动态特性(行为特性)的操作系列 比如人都具有工作、学习等行为特性
对象可以表示:
对象可以是看的见、摸的着的有形的实体,如计算机、飞机、汽车等等;
对象也可以表示人或组织所起的作用,如治病、教学、生产等;
对象还可以表示事件,如各种事故、演出、战斗、开会等;
对象更可以表示规则,如各种专家规则、约束条件、正则表达式等
1.2.2 类
把事物归纳、划分成类是我们认知世界常用的方法
分类的依据的原则是抽象,也就是忽略事物的非本质特征,只注意事物的本质特征
找出事物的共性并将具有共同性质的事物划分为同一个类
同一类中的对象有相同的属性(也称为成员变量,它描述该类的静态特性或结构特性)
同一类中的对象有相同的方法(也称服务,它描述该类的行为特性或动态特性)
同一类中的对象遵守相同的语义规则。(共同的约束或规则)
1.2.3 类和对象的关系
1.3面对对象编程原则
1.3.1 封装
对象将数据和数据的操作打包为一个不可分割的最基本模块,使得只有该类的方法可以操纵和改变这些数据,这就是封装
封装是允许有选择地隐藏类中的属性和方法
1.3.1 继承
继承(重用)现有类生成新类
继承关系:
父类是有其它类继承其行为的类
继承父类的类称为子类
1.3.3 多态
多态是建立在继承基础之上的
不同的子类继承自同一个父类,父类的用一个方法以不同方式实现
2. 面对对象程序设计
2.1 创建类
类就是对象的模板(template ),是对象的抽象。
而对象就是类的一个实例(instance)
类包含:属性;方法
数据成员是通过方法(函数)访问的
2.1.1 类定义
Java使用关键字class定义一个类 定义类时,用属性(成员变量)定义类的静态特征,用方法来定义类的行为特征。
修饰符 class 类名{
变量类型 变量名;
…
变量类型 变量名;
方法修饰符 返回类型 方法名(形参1,形参2,…){
//方法体
}
…
方法修饰符 方法名(参数1,参数2,…){
//方法体
}
}
例如:
public class Dog {
int age;
String name;
String color;
void barking() {
}
void sleeping() {
}
}
2.1.2 定义属性(变量)
语法格式:
修饰符 变量类型 变量名;
修饰符 变量类型 变量名 = 变量值;
private int row = 5;
类中的属性有:
-
局部变量
在方法、构造方法或者语句块中定义的变量被称为局部变量。 变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
-
成员变量
成员变量是定义在类中,方法体之外的变量。 这种变量在创建对象的时候实例化。 成员变量可以被类中方法、构造方法和特定类的语句块访问。
-
类变量
类变量也声明在类中,方法体之外,但必须声明为static类型。
-
this关键字:
//构造方法有三个参数 public Dog(int age,String name,String color){ //this代指当前对象,这样区分了局部变量和对象变量同名的问题 this.age = age; this.name = name; this.color = color; }
作用:表示对当前对象的引用;
表示类的成员变量,而不是方法中的成员变量,在两者同名时进行区分,最常用的this使用方式;
注意:this不能在static方法中使用
2.1.3 定义方法
语法格式:
修饰符 方法返回类型 方法名(形参1,形参2,…){
方法体;//语句
}
例如:
public int add(int i,int j) {
return i+j;
}
构造方法
构造方法是类的特殊方法,与类同名且没有返回值
对象的创建通过构造方法实现,构造方法的功能是完成对象的初始化,当类实例化一个对象会自动调用构造方法
类中必定有构造方法,若没有则系统自动添加一个无参无方法体的空构造方法
例如:
public Dog(int a,String n,String c){
age = a;
name = n;
color = c;
}
2.1.4 定义类的属性和方法
-
静态变量
不管创建了类的多少实例,整个类中静态变量的副本只有一个。 引用静态变量的方法:通过类的名称,通过引用类的任一实例
例如:
//静态变量 static int numOfLegs = 4;
-
静态方法
静态方法只能访问静态成员,实例方法可以访问静态和实例成员 之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象 类方法没有this
例如:
//定义静态方法,获取腿的数量 public static int getLegs(){ return numOfLegs; }
2.2 创建对象
2.2.1 创建对象的格式
对象是类的实例化
Java中使用new关键字来创建对象
创建对象有两步:
声明:声明一个对象,包括对象名称和对象类型
实例化:使用关键字new来创建一个类的对象。
格式:
类名 对象名 = new 类名();
例如:
public class Dog {
int age;
String name;
String color;
//构造方法有三个参数
public Dog(int a,String n,String c){
age = a;
name = n;
color = c;
}
public static void main(String[] args) {
//生成Dog类的一个对象,并按照构造方法参数表传入参数值
Dog wangcaiDog = new Dog(1,"Wangcai","brown");
}
}
2.2.2. 关键字new的作用
创建一块内存空间并将内存空间分配给创建的对象
将对象的属性成员变量全部初始化,并执行构造方法
类成员变量初始值:
Java保证了在任何代码使用该对象之前,已将对象中的状态信息初始化为缺省值
2.3 属性和方法的调用
2.3.1. 对象的属性和方法调用:
格式:
对象.成员变量
对象.方法名()
例如:
//访问对象的变量
int age = wangcaiDog.age;
//调用对象的方法
wangcaiDog.barking();
2.3.2 类的属性和方法调用
格式:
类.成员变量
类.方法名()
例如:
//调用Dog类的属性
int numOfLegs = Dog.numOfLegs;
//调用Dog类的静态方法而不需要生成一个对象来调用
wangcaiDog.getLegs();
2.4 类的访问控制
Java中一般把属性数据和一些私有的方法声明为private或者protected类型,从而使这些数据或者方法不能被外部修改或调用。
只有我们希望被外部直接访问的属性数据和方法才声明为public。
如果在声明数据和方法时不写是private、protected还是public,那么类型为默认。
2.5 对象的比较
两个对象相比较,一定要注意是比较值还是比较地址
//生成Dog类的一个对象,并按照构造方法参数表传入参数值
Dog wangcaiDog = new Dog(1,"Wangcai","brown");
Dog xiaoheiDog = new Dog(1,"Wangcai","brown");
System.out.println("两个对象的比较结果为:"+(wangcaiDog==xiaoheiDog));
2.6 对象的销毁
对象在创建的时候,系统会分配内存空间给新建的对象,当对象被销毁,内存空间会归还给系统,该对象就不可以再继续使用了。
//生成Dog类的一个对象,并按照构造方法参数表传入参数值
Dog wangcaiDog = new Dog(1,"Wangcai","brown");
Dog xiaoheiDog = new Dog(1,"Wangcai","brown");
System.out.println("两个对象的比较结果为:"+(wangcaiDog==xiaoheiDog));
//销毁对象,将对象置为空
wangcaiDog = null;
面向对象编程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。