面向对象程序设计思想
2008-06-16 18:19
218 查看
一、面向对象程序设计思想
程序语言的发展:面向过程和面向对象的比对。复用层次上的不同。合适的方法应该出现在合适的类中
面向对象的设计思想:基本思想是从实际世界中存在的事物出发去构建系统。尽量使用人的自然思维。更加强调人的正常思想的思维方式和原则,如抽象分类等。
二、对象和类的概念
1、对象:对象对问题域中的事物进行描述。对象通过属性(Attribute)和方法(method)对事物本身的静态属性和动态方法进行描述
2、类是用于描述同一类型的对象的抽象概念,类中定义它所应该具有的静态属性和动态方法
3、类可以看作一类对象的模板,对象可以看作类的一个具体的实例。
三、关联关系:方法的参数是某一对象的类型(引用),最弱的一种关系
四、继承关系:继承树,派生
五、聚合关系:整体和部分的关系。如球队和球员,队长;手脚和人的关系
六、实现关系:interface,接口。子类对于父类有自己的关系,父类的某一个方法需要子类去实现它。
**七、面向对象思维的要点
考虑有哪些事物参与,不考虑过程
每一个类的属性和方法是哪些
类之间的关系有哪些
八、java与面向对象
1、对象是java的核心
2、对象可以看成是动态方法和静态属性的封装体
3、类是用来定义一类对象的模板,在一个类中定义了该类所应该具有的所有静态属性和动态方法。
4、jdk提供了类供使用,也可以使用自己定义的类。
public class Dog {
int furColor;
float height;
float weight;
void catchMouse (mouse m) {
m.scream();
}
public static void main(String[] args) {
Dog d=new Dog();
Mouse m = new Mouse();
d.catchMouse(m);
}
}
九、为什么使用面向对象
reusability,extensibility可重用性和可扩展性,组件相当于很多个类,比对象具有更高层次上的抽象,包括EJB.WebService,CORBA,COM
十、java中面向对象和内存解析
1、java类的定义方法
用class定义一个类
2、 类主要有成员变量和方法组成。
[(modifiers)] type <att_name> [=default value]
[(modifiers)] type <return_type> <name> [<arg_list>] { [<statements>]}
3、成员变量
1、引用和基本类型
2、可以初始化也不进行初始化,不初始化将使用默认值0.0,boolean的初始值是false
3、局部变量和成员变量要相互区分开
4、成员变量的作用域在类中
4、引用
java中除了基本数据类型就是引用数据类型
java中对对象的操作是通过引用完成的
String s;//声明一个应用变量,但没有指向任何值
s=new String("xxxxx");//在堆内存中新建一块内存,他的值是"xxxxx",地址是"yyyyy"在栈中有一块内存,类型是String,值是s,它指向"yyyyy",此时可以通过s对其进行操作
5、如何在内存中区分类和对象
类是静态的概念
对象是new出来的,它在heap中,类的每一个成员变量在对象中都有不同的值(静态对象除外)而方法只有一份,它只有在执行时才占用内存
对象因为是动态生成的,所以运行时位于对内存中
十一、对象的创建规则
1、new关键字
2、对象.成员变量
3、对象.method(args_list)
4、同一类的每一个对象都有不同的成员变量存储空间
5、同一类的对象共享该类的方法
十二、类和对象的关系
如下代码
public class c {
int i;
int j;
public static void main(String[] args) {
C c1=new C();
C c2=new C();
}
}在stack中存在两变量c1,c2,分别指向heap中的两块内存区域,并分别有c1.i,c2.i两个int类型变量
十三、构造方法
1、用new construction()创建一个对象
2、构造方法是一个定义来初始化对象的函数
3、构造方法与类同名
构造方法的内存情况
没有指定构造方法时,编译器自动添加一个空的构造方法
错误:找不到符号,是定义变量等出了问题
构造函数没有返回值,如果加上return,则会使用系统默认构造函数
十四、约定俗称的命名规则
1、类名的首字母大写
2、变量名和方法名首字母小写
3、使用驼峰命名规则
练习:
定义三维空间点1、生产特定坐标的函数,2、设置坐标的方法,3、计算坐标与原点距离的平方方法。
十五、方法重载和内存解析
方法重载是指一个类中名字相同而参数不同的几个函数。调用时根据不同的参数列表选择不同的方法
参数个数不同,参数类型不同。
**返回值不同不构成重载,出现重名错误
十六、对象创建和使用小结
内存共享,属性各异,方法共享。非静态方法针对某一对象进行调用。必须对其进行实例化后使用。
十七、this
1、类定义中使用this关键字代表该方法的对象的引用
2、必须指出当前使用的方法是谁时使用this
3、有时可以使用this去处理方法中成员变量和参数重名的情况
4、this可以看作变量,它的值为当前对象的引用
this指向对象本身,在stack中建立一个this的引用指向调用的对象
十八、static
1、static是共有成员,对类来说,static只有一个,static保存在data segment中。
2、静态值的访问:所有对象都可以访问静态值,类.成员表示静态值
3、字符串常量保存在data segment中
4、静态值常用于计数
5、**静态方法不用将对象的引用传递给它,所以在static方法中不能访问非static成员(静态方法不是针对每一个对象的调用)
6、使用对象引用或者类名访问static
十九、package和import
为了解决重名冲突的问题,java引入了package的机制
1、package语句为java程序中的第一条语句,指明改文件中定义的类的包,如果使用缺省值,则为无名包
2、如果要找一个子目录,则必须写全package
3、 如果要把一个类打包,在类源文件的第一行写package
保证class文件位于正确的目录下,源代码可能产生影响,删除或移走会产生影响
另外的类如果想访问某一个包,需要写全类名,引入包,如果访问位于同一个包中的类,则不需要引入
必须让class文件的最上一层包的父目录位于classpath下。
执行一个类需要写全包名
4、jdk中主要的包的介绍
lang核心类,awt抽象窗口工具集,net 网络,io输入输出,util实用工具,其中java.lang不需要引入
5、打包jar,文件位于工作路径的上级目录java -cvf *.jar(*.*)
可以直接将jar文件设入class path中
写了package必须将class文件位于路径之下
二十、继承和全线控制
1、访问控制
权限修饰符 类内部 同一个包 子类 任何地方
private y n n n
default y y n n
protected y y y n
public y y y y
2、对class修饰只能使用public和default
public可以在任何地方访问,default类只能在一个包的内部进行访问
default就是包权限,包内的其他类可以访问,子类或不同的包内的类不能访问。
protected子类可以直接访问
3、类的继承和权限控制
java使用extends关键字实现类的继承机制
&
4000
lt;modifier> class <name> [extends <superclass>] {}
通过继承,子类自动拥有了父类的所以成员变量和方法
java只支持但继承,不能多继承,即一个子类只能有一个父类,一个父类可以有多个子类
** cmd 中的文件也是区分大小写的
4、内存中,子类对象包含父类对象
二十一、方法重写
1、子类可以根据父类中继承的方法进行重写
2、重写必须具有和被重写的方法具有相同的名称,参数名和返回类型
3、重写方法不能具有比被重写方法更加严格的访问权限
二十二、super关键字
和this关键字类似,指向的是父类对象。
二十三、继承中的构造方法
1、子类的构造过程要先调用父类的构造函数
2、子类可以使用super()调用父类的构造方法,重载时需要通过参数列表进行区分
3、可以使用this调用自己,如果使用super(),则此代码必须写在子类构造方法的第一行,否则会出错
二十四、jdk_api文档查询
位于jre/lib/rt.jar中,
二十五、Object.toString()
1、Object是所以类的基类
2、若某个类没有指定父类,则它的父类默认为object
3、Object.toString()直接打印某个类,返回代表类的字符串,在字符意义上代表了这个类,使用hash编码
4、hash编码代表了独一无二的一个对象,通过改该编码可以找到该对象
二十六、Object.equals()
1、public boolean equals(Object obj)定义判断对象是否相等
2、x.equals(y),在x,y为同一对象的引用时返回true,否则返回false
3、jdk中的一些类,如Date,String重写了此方法。此时x,y为同一类对象,且值相等时,返回true
4、可以给用户定义的类重写此方法
5、空值永远返回false
6、判断过程:判断类是否相同,强制转换为object,变成要进行比较的类
??7、不能使用==进行String类的相等判断,静态变量一定相等
??二十七、对象装型(casting)
1、一个基类的引用型变量可以指向其子类的对象
2、一个基类的引用不能访问其子类新增加的成员
3、可以使用引用变量.instanceof(类名)判断该引用指向的对象是否属于该类或该类的子类
4、子类对象可以当成基类对象称为向上转型,反之称为向下转型
父类可以自己new成子类对象,此时变量被当成父类,只能使用父类成员,但它的类已经变成了父类。instanceof查的是他的定义类型而不是内存类型。如果要访问其成员则需要使用强制类型转换。传递参数时,可以要求传递对象的子类
5、casting用于扩展程序,不改变主结构
二十八、多态
1、动态绑定和多态(迟绑定late binding)
动态绑定:执行期间自动判断引用的实际类型,根据实际类型调用相应的方法
定义为一个父类的引用,使用时具有最大的灵活性
子类传给方法则父类引用指向子类,父类不能访问子类新增加的成员,当方法被重写以后,其调用实际的方法,根据参数类型去确定。
动态绑定用于在实际中查找参数的类型
2、多态的必要条件
继承、重写、父类引用指向子类对象
二十九、抽象类
1、使用abstract修饰
2、抽象类必须被继承,抽象方法必须被重写。
3、抽象类或者方法用于没有实现但是有定义的必要的时候
4、不用实现,抽象方法是用来重写的
5、有抽象方法的类必须被定义为抽象类
6、继承抽象类必须重写抽象方法,或者重写一边抽象方法
7、抽象类不能实例化
如构建动物的类,动物叫是一个抽象方法,它不需要实现,由它的子类去实现
三十、final关键字
用于方法不需要被重写时
1、final不能改变,成员变量,局部变量
2、final不能被重写
3、final不能被继承
三十一、接口
1、多个无关类可以实现同一个接口
2、一个类可以实现多个无关的接口
3、与继承类似,接口与实现类之间存在多态性
4、定义java类的格式
<modifier> class <name> [extends <superclass>] [implements <interface>, [implements <interface>,]] {}
5、接口
抽象方法和常量值定义的集合
接口是特殊的抽象类,它只有方法的定义额常量,而没有变量和方法的实现
6、接口的特性
可以多重实现,一个类可以实现多个接口
接口声明属性默认为public static final
接口方法只能是抽象方法,只能是public的
接口可以继承其他接口,并添加新的属性和抽象方法
实现接口相当于实现了接口中的抽象方法,此时必须重写接口中的所以抽象方法
可以定义一个接口类型变量指向某一个类,相当于父类指向子类,此时接口类型变量只能使用接口类型中定义的属性
程序语言的发展:面向过程和面向对象的比对。复用层次上的不同。合适的方法应该出现在合适的类中
面向对象的设计思想:基本思想是从实际世界中存在的事物出发去构建系统。尽量使用人的自然思维。更加强调人的正常思想的思维方式和原则,如抽象分类等。
二、对象和类的概念
1、对象:对象对问题域中的事物进行描述。对象通过属性(Attribute)和方法(method)对事物本身的静态属性和动态方法进行描述
2、类是用于描述同一类型的对象的抽象概念,类中定义它所应该具有的静态属性和动态方法
3、类可以看作一类对象的模板,对象可以看作类的一个具体的实例。
三、关联关系:方法的参数是某一对象的类型(引用),最弱的一种关系
四、继承关系:继承树,派生
五、聚合关系:整体和部分的关系。如球队和球员,队长;手脚和人的关系
六、实现关系:interface,接口。子类对于父类有自己的关系,父类的某一个方法需要子类去实现它。
**七、面向对象思维的要点
考虑有哪些事物参与,不考虑过程
每一个类的属性和方法是哪些
类之间的关系有哪些
八、java与面向对象
1、对象是java的核心
2、对象可以看成是动态方法和静态属性的封装体
3、类是用来定义一类对象的模板,在一个类中定义了该类所应该具有的所有静态属性和动态方法。
4、jdk提供了类供使用,也可以使用自己定义的类。
public class Dog {
int furColor;
float height;
float weight;
void catchMouse (mouse m) {
m.scream();
}
public static void main(String[] args) {
Dog d=new Dog();
Mouse m = new Mouse();
d.catchMouse(m);
}
}
九、为什么使用面向对象
reusability,extensibility可重用性和可扩展性,组件相当于很多个类,比对象具有更高层次上的抽象,包括EJB.WebService,CORBA,COM
十、java中面向对象和内存解析
1、java类的定义方法
用class定义一个类
2、 类主要有成员变量和方法组成。
[(modifiers)] type <att_name> [=default value]
[(modifiers)] type <return_type> <name> [<arg_list>] { [<statements>]}
3、成员变量
1、引用和基本类型
2、可以初始化也不进行初始化,不初始化将使用默认值0.0,boolean的初始值是false
3、局部变量和成员变量要相互区分开
4、成员变量的作用域在类中
4、引用
java中除了基本数据类型就是引用数据类型
java中对对象的操作是通过引用完成的
String s;//声明一个应用变量,但没有指向任何值
s=new String("xxxxx");//在堆内存中新建一块内存,他的值是"xxxxx",地址是"yyyyy"在栈中有一块内存,类型是String,值是s,它指向"yyyyy",此时可以通过s对其进行操作
5、如何在内存中区分类和对象
类是静态的概念
对象是new出来的,它在heap中,类的每一个成员变量在对象中都有不同的值(静态对象除外)而方法只有一份,它只有在执行时才占用内存
对象因为是动态生成的,所以运行时位于对内存中
十一、对象的创建规则
1、new关键字
2、对象.成员变量
3、对象.method(args_list)
4、同一类的每一个对象都有不同的成员变量存储空间
5、同一类的对象共享该类的方法
十二、类和对象的关系
如下代码
public class c {
int i;
int j;
public static void main(String[] args) {
C c1=new C();
C c2=new C();
}
}在stack中存在两变量c1,c2,分别指向heap中的两块内存区域,并分别有c1.i,c2.i两个int类型变量
十三、构造方法
1、用new construction()创建一个对象
2、构造方法是一个定义来初始化对象的函数
3、构造方法与类同名
构造方法的内存情况
没有指定构造方法时,编译器自动添加一个空的构造方法
错误:找不到符号,是定义变量等出了问题
构造函数没有返回值,如果加上return,则会使用系统默认构造函数
十四、约定俗称的命名规则
1、类名的首字母大写
2、变量名和方法名首字母小写
3、使用驼峰命名规则
练习:
定义三维空间点1、生产特定坐标的函数,2、设置坐标的方法,3、计算坐标与原点距离的平方方法。
十五、方法重载和内存解析
方法重载是指一个类中名字相同而参数不同的几个函数。调用时根据不同的参数列表选择不同的方法
参数个数不同,参数类型不同。
**返回值不同不构成重载,出现重名错误
十六、对象创建和使用小结
内存共享,属性各异,方法共享。非静态方法针对某一对象进行调用。必须对其进行实例化后使用。
十七、this
1、类定义中使用this关键字代表该方法的对象的引用
2、必须指出当前使用的方法是谁时使用this
3、有时可以使用this去处理方法中成员变量和参数重名的情况
4、this可以看作变量,它的值为当前对象的引用
this指向对象本身,在stack中建立一个this的引用指向调用的对象
十八、static
1、static是共有成员,对类来说,static只有一个,static保存在data segment中。
2、静态值的访问:所有对象都可以访问静态值,类.成员表示静态值
3、字符串常量保存在data segment中
4、静态值常用于计数
5、**静态方法不用将对象的引用传递给它,所以在static方法中不能访问非static成员(静态方法不是针对每一个对象的调用)
6、使用对象引用或者类名访问static
十九、package和import
为了解决重名冲突的问题,java引入了package的机制
1、package语句为java程序中的第一条语句,指明改文件中定义的类的包,如果使用缺省值,则为无名包
2、如果要找一个子目录,则必须写全package
3、 如果要把一个类打包,在类源文件的第一行写package
保证class文件位于正确的目录下,源代码可能产生影响,删除或移走会产生影响
另外的类如果想访问某一个包,需要写全类名,引入包,如果访问位于同一个包中的类,则不需要引入
必须让class文件的最上一层包的父目录位于classpath下。
执行一个类需要写全包名
4、jdk中主要的包的介绍
lang核心类,awt抽象窗口工具集,net 网络,io输入输出,util实用工具,其中java.lang不需要引入
5、打包jar,文件位于工作路径的上级目录java -cvf *.jar(*.*)
可以直接将jar文件设入class path中
写了package必须将class文件位于路径之下
二十、继承和全线控制
1、访问控制
权限修饰符 类内部 同一个包 子类 任何地方
private y n n n
default y y n n
protected y y y n
public y y y y
2、对class修饰只能使用public和default
public可以在任何地方访问,default类只能在一个包的内部进行访问
default就是包权限,包内的其他类可以访问,子类或不同的包内的类不能访问。
protected子类可以直接访问
3、类的继承和权限控制
java使用extends关键字实现类的继承机制
&
4000
lt;modifier> class <name> [extends <superclass>] {}
通过继承,子类自动拥有了父类的所以成员变量和方法
java只支持但继承,不能多继承,即一个子类只能有一个父类,一个父类可以有多个子类
** cmd 中的文件也是区分大小写的
4、内存中,子类对象包含父类对象
二十一、方法重写
1、子类可以根据父类中继承的方法进行重写
2、重写必须具有和被重写的方法具有相同的名称,参数名和返回类型
3、重写方法不能具有比被重写方法更加严格的访问权限
二十二、super关键字
和this关键字类似,指向的是父类对象。
二十三、继承中的构造方法
1、子类的构造过程要先调用父类的构造函数
2、子类可以使用super()调用父类的构造方法,重载时需要通过参数列表进行区分
3、可以使用this调用自己,如果使用super(),则此代码必须写在子类构造方法的第一行,否则会出错
二十四、jdk_api文档查询
位于jre/lib/rt.jar中,
二十五、Object.toString()
1、Object是所以类的基类
2、若某个类没有指定父类,则它的父类默认为object
3、Object.toString()直接打印某个类,返回代表类的字符串,在字符意义上代表了这个类,使用hash编码
4、hash编码代表了独一无二的一个对象,通过改该编码可以找到该对象
二十六、Object.equals()
1、public boolean equals(Object obj)定义判断对象是否相等
2、x.equals(y),在x,y为同一对象的引用时返回true,否则返回false
3、jdk中的一些类,如Date,String重写了此方法。此时x,y为同一类对象,且值相等时,返回true
4、可以给用户定义的类重写此方法
5、空值永远返回false
6、判断过程:判断类是否相同,强制转换为object,变成要进行比较的类
??7、不能使用==进行String类的相等判断,静态变量一定相等
??二十七、对象装型(casting)
1、一个基类的引用型变量可以指向其子类的对象
2、一个基类的引用不能访问其子类新增加的成员
3、可以使用引用变量.instanceof(类名)判断该引用指向的对象是否属于该类或该类的子类
4、子类对象可以当成基类对象称为向上转型,反之称为向下转型
父类可以自己new成子类对象,此时变量被当成父类,只能使用父类成员,但它的类已经变成了父类。instanceof查的是他的定义类型而不是内存类型。如果要访问其成员则需要使用强制类型转换。传递参数时,可以要求传递对象的子类
5、casting用于扩展程序,不改变主结构
二十八、多态
1、动态绑定和多态(迟绑定late binding)
动态绑定:执行期间自动判断引用的实际类型,根据实际类型调用相应的方法
定义为一个父类的引用,使用时具有最大的灵活性
子类传给方法则父类引用指向子类,父类不能访问子类新增加的成员,当方法被重写以后,其调用实际的方法,根据参数类型去确定。
动态绑定用于在实际中查找参数的类型
2、多态的必要条件
继承、重写、父类引用指向子类对象
二十九、抽象类
1、使用abstract修饰
2、抽象类必须被继承,抽象方法必须被重写。
3、抽象类或者方法用于没有实现但是有定义的必要的时候
4、不用实现,抽象方法是用来重写的
5、有抽象方法的类必须被定义为抽象类
6、继承抽象类必须重写抽象方法,或者重写一边抽象方法
7、抽象类不能实例化
如构建动物的类,动物叫是一个抽象方法,它不需要实现,由它的子类去实现
三十、final关键字
用于方法不需要被重写时
1、final不能改变,成员变量,局部变量
2、final不能被重写
3、final不能被继承
三十一、接口
1、多个无关类可以实现同一个接口
2、一个类可以实现多个无关的接口
3、与继承类似,接口与实现类之间存在多态性
4、定义java类的格式
<modifier> class <name> [extends <superclass>] [implements <interface>, [implements <interface>,]] {}
5、接口
抽象方法和常量值定义的集合
接口是特殊的抽象类,它只有方法的定义额常量,而没有变量和方法的实现
6、接口的特性
可以多重实现,一个类可以实现多个接口
接口声明属性默认为public static final
接口方法只能是抽象方法,只能是public的
接口可以继承其他接口,并添加新的属性和抽象方法
实现接口相当于实现了接口中的抽象方法,此时必须重写接口中的所以抽象方法
可以定义一个接口类型变量指向某一个类,相当于父类指向子类,此时接口类型变量只能使用接口类型中定义的属性
相关文章推荐
- Android编程思想,面向对象程序设计第一篇——设计模式6个原则
- 面向对象的程序设计的思想
- Android编程思想,面向对象程序设计第四篇——继承(上)重复代码放在基类
- 面向对象程序设计思想 在单片机中的应用
- 面向对象程序设计思想简述
- Java面向对象的程序设计思想
- 面向对象程序设计的思想
- 面向对象程序设计的思想
- 面向对象程序设计思想的魅力
- 面向对象程序设计思想&继承与关键字(5.22)
- 面向对象的程序设计思想
- Android编程思想,面向对象程序设计第三篇——观察者模式
- Android编程思想,面向对象程序设计第六篇——封装(上)布局模块化
- 程序设计基础——面向对象程序设计思想
- 面向对象程序设计的思想的优点
- Android编程思想,面向对象程序设计第二篇——单例模式
- 面向对象程序设计思想
- 面向对象程序设计的思想的长处
- 1,基础语法和面向对象程序设计思想
- 【学习java编程思想】day_1面向对象程序设计的方法