面向对象:
面向过程:
程序设计,软件开发解决的本质问题?就是抽象。
抽象需要抽象什么? (数据,业务逻辑)
以什么抽象作为导向(面向)?
面向对象:以数据抽象为导向
面向过程:以业务逻辑抽象为导向
类: 1,静态属性 --属性
2,动态行为 --方法 属性,方法 统称为类的成员
--方法
1,修饰符 返回值类型 方法名 (形参表){
方法体
}
public void move(){
System.out.println(name +"Moving");
}
public访问权限修饰符(公开的)
private(私有)
void返回值类型(空类型)
int,double,String。。。
move方法名
命名习惯:
1,类名 每个单词首字母大写,其他字母小写
2,属性.方法名 第一个单词全小写,以后每个单词首字母大写,其他字母小写。例:setName()
3,包名 全小写
4,常量 所有字母大写 例:final int MAX_SIZE; final常量修饰符
方法调用匹配:
1,实参类型和形参类型要匹配
2,方法中return的值和返回值类型要匹配
方法调用的步骤:
1,为被调用方法分配临时空间
2,将实参传给形参
3,流程跳到被调用方法中执行
4,执行完或者遇到return,流程返回主调方法,同时被调方法临时空间释放。
注:一个java文件可以定义多个类,但只能有一个pubilc声明的类,并且这个用public声明的类,类名必须跟文件名一致
按值传递(适合所有基本数据类型)
按引用来传递(对象)
构造方法:
1,构造方法必须跟类名同名
2,构造方法没有返回值,也不用声明void
面向对象的三大特征:封装,继承,多态
继承:
抽象父子类关系遵循原则:任何父类适用的地方子类一定适用。
注:继承不是最好的代码复用的方法。
关键字extends(扩展)
例:public class Bird extends Animal{}
生成对象的过程:
1,分配对象空间
2,给属性赋初值
3,调用构造方法
定理:
1,任何主类对象构造方法都会去调用父类的构造方法
2,任何类都有构造方法,如果程序员自己不定义,则系统会加上一个默认的构造方法,如果定义了系统就不会加。
3,任何子类的构造方法第一行一定是super(...);或者this(...),如果程序员不这样写,则系统会默认的加上super(...);
this(...);调用本类的其他构造方法,他只能出现在构造方法的第一行。
super(...);调用父类的构造方法,该语句只能出现在构造方法的第一行。
super();调用父类中无参的构造方法。
子类中调用父类中的同名方法用super.xxx
this.xxx 调用本类中同名的成员变量
方法覆盖:
1,放生在父子类之间;
2,同名,同参,同返回值;
3,子类方法的访问权限不能比父类方法的更封闭;
4,子类方法抛出异常的类型不能比父类方法更宽泛