1 oop概念
面向对象的分析(OOA,Object Oriented Analysis)
面向对象的设计(OOD,Object Oriented Design)
面向对象的编程实现(OOP,Object Oriented Programming)
OOP:
将现实世界中的事物进行分类(java中称为type,对应代码关键字class);
OOP将现实中事物分类后,通过描述其静态的属性和其所拥有的动作,对所描述的
类进行说明;
UML(统一建模语言)
使用图形化方式设计OOP中软件工程中各个环节;IBM Rational Rose
2 OOP对象中对应关系
现实中
具体事物:
服务员某一具体的人
抽象分类:
服务员(提取当前分类有重要关系的静态属性,一些相关动作)
对应代码:
分为类(抽象分类概念)
类声明(类定义)
访问修饰 class 类名称{
属性/成员变量
方法
}
① 类中属性语法:
访问修饰符 [属性] 属性的类型 属性名[=初始值];
注意:
属性没有指定初始值,自动初始化;如果属性的类型是基本类型,则值会初始化为0;
如果对象类型,则初始化为null;
② 类中方法语法:
访问修饰符 [属性] 返回类型 方法名([形参类型 名称,....]) {
}
类中的属性和方法的访问修饰符:
访问修饰符,决定该方法或属性能够访问的约束;
关键字 同一个类中 同一个目录中 不同目录的父子类 不同目录的无关联类 <--访问范围
public
protected
默认
private
3 使用类
当完成类的定义后,可以根据类创建一个多个对象, 通过对象调用自身属性和方法;
语法:
自定义的类名 变量名=new 调用类型的构造方法();
java中类和对象的关系?
java中使用类对应现实中分类概念,是抽象的(代码中没有内存);
对象根据java中类在JVM中创建对象,对应现实世界中具体是一个事物,在代码中有内存(new 类型名());
4 java对象的垃圾回收机制
java对象的生命周期,首先,定义自定义的类(包含自定义属性和方法);其次,具体代码中通过类创建
对象,对象生命周期开始;当前代码中将引用该对象的变量重写赋值后,则该对象在jvm的堆中变成垃圾;
当堆中的伊甸区内存满了,jvm启动垃圾回收机制;
5 this关键字的用法
在自定义中this有两种用法
① 在方法代码中this. 可以调用类中的属性和方法,this代表当前对象本身;
② 在构造方法的第一条语句中可以使用this([实际参数])可以调用其他构造方法;
提问:
创建短信类,包含发信人,发送时间,发送信息;
public class Message{
private String person;
private Date date;
private String info;
}
public class Phone{
private String number;
//发短信
public Message sendMess(){
Message mes=new Message();
}
}
1 javaBean
java规范中对于封装数据的对象,通过私有属性封装数据 ,通过公有的方法使用属性,
这样的类一般称为JavaBean;
语法规范:
① 类必须是public,要一个public无参数的构造方法;
② 属性(使用camel命名法)私有化,方法公有化;
③ 针对私有的属性,必须提供公有的getter/setter方法;
Idea使用 alt+insert快捷键->代码生成器
eclipse :alt+shift+s->r->alt+a->alt+o->enter
2 package(包)
在类的根目录下创建包, 放置在包中代码需要在第一行中是package关键字进行标识;
在不同包下使用类时,需要在package关键字下使用import语句导入不同包下的类
例如:jdk1.5支持的静态导入语法
package call.po;
public class One {
static {
System.out.println("one....");
}
public static String tohello(){
return "下午又要开会...";
}
}
//jdk1.5 静态导入,静态属性和方法
import static call.po.One.tohello;
import static call.po.One.AGE;
public static void main(String[] args) {
System.out.println("main..."+AGE);
}
不同包下相互访问需要public的访问修饰符;
javaOOP继承(extends)
动物
|
|------|
狮子 羊
在代码级别,可以将狮子和羊共同特征抽取,上层动物类中,而动物类称为父类;
狮子和羊称为动物类的子类;
java继承的特点:
① java中继承是单继承;
② java中子类可以共享父类中可以使用的属性和方法,使得到很好代码重用;
注意:
方法或属性,在父类使用protected访问修饰符,声明即使子类和父类不在同一个包中,
也能让子类和子类对象使用属性或方法;
③ 子类继承父类使用extends关键字;
④ 子类可以重写父类的方法;
子类可以继承父类中属性和方法,特别是方法,子类可以重写父类的中的方法,使用
jdk提供元注解(Annotation)@Override, 重写要求子类与父类方法的形式保持一致;
注意,子类重写父类的方法时,子类中方法的访问修饰符的范围大于等于父类修饰符范围;
子类重写方法的返回类型对于父类方法来说,可以是父类方法返回类型的具体子类;
⑤ 实例化子类时,实际先在堆中实例化父类对象,然后再实例化子类对象;
在子类中可以使用super关键字关联父类;
当前父类构造器没有无参数的构造方法时,子类显式构造器中第一条语句必须使用super()显示调用父类构造器
例如:
public class Animal {
protected int age=1;
public Animal(int x){
this.age=x;
}
public void cry(){
System.out.println("动物哭泣...");
}
}
子类:
public class Pig extends Animal{
int age=5;
public Pig(){
//当前父类构造器没有无参数的构造方式时,子类显式构造器中第一条语句必须使用super()显示调用父类构造器
//super();//默认
super(3);
}
public void cry(){
//在子类中使用super表示调用父类对象
System.out.println("小猪哭泣..."+super.age);
}
public void intro(){
super.cry();
}
}
⑥ java中所有类直接或间接继承java.lang.Object类;
题目:
设计类,一个植物类(属性:高度;方法:生长---交一次水,生成高度增加0.01米)
针对植物类的百合花子类(方法:生长---交一次水,生成高度增加0.03米)
通过Test类中main方法测试百合花浇三次水的情况;
代码实现: