编程思想:需求–》建立思路–》目标代码
面向过程的思想:自顶向下 逐步求精
重点内容
1、编程思想:面向对象
SmallTalk
对象:一切客观存在的事物。
C面向过程—-C++ (面向过程和面向对象)
java 纯面向对象
属性:有什么
方法:能做什么
对象的属性有可能又是一个对象。
对象的方法的使用者又是一个对象。
任何对象都会有自己的方法,给别的对象用。
客观世界是由对象组成的
1)小对象组成大对象。
2)对象间彼此方法调用。
解决客观问题:面向对象的思想
1)把解决问题所需要的对象。
2)对象间如何配合,完成需求。
计算机需求 来源于 客观世界
解决计算机问题,同样可以采用面向对象的思想。
计算机中的对象:
JVM中连续的存储空间(数据)
代表生活中的对象,生活中的对象在计算机中的抽象
各司其职 对象应该保持简单性
弱耦合性 对象和对象之间的联系应该尽量弱化
可重用性
可扩展性
2、类:
1)对象共性的抽象
2)客观对象在人脑中的主观反应,类人对对象的认识。
3)类是对象的模版
如何编写一个类
属性:实例变量
1)有默认值 数值类型:0 布尔类型:false 对象类型:null
2)作用范围:至少是全类的内部
3)可以与局部变量发生命名冲突,冲突的时候局部优先
局部变量:先赋值后使用。定义在方法中,范围定义开始,到定义改变量的代码块
3、方法:
方法的声明:对象能做什么
修饰符 返回值类型 方法名(参数表) 抛出的异常
方法的实现:对象怎么做
重载(OverLoad)与覆盖(OverRide)
方法的重载:
1)参数的个数不同
2)参数的类型不同
3)参数类型的排序不同
形参名不同,不算重载
由编译器在程序编译的时候,根据实参的类型选择一个合适的方法调用。 编译时多态。
向上就近类型匹配原则 避免混淆情况。
方法重载决定取决于编译器。
上面是面试
作用:
让一个对象的同类方法,由于参数表的不同造成的差异,对用户屏蔽。
构造方法:
1)没有返回值类型
2)方法名必须和类名相同
3)不允许手工调用,在对象构造过程中自动调用一次
类写完是构造对象用的。
如果一个类没有定义任何构造方法,系统会默认添加一个公开的无参的构造方法。
构造方法在创建对象的时候用。
对象的创建过程:
1)分配空间 所有的实例变量被赋予默认值。
2)初始化属性 所有的实例变量被赋予初始值。
3)调用某一个构造方法 实例变量常常被第三次赋值。
构造方法经常是用来给属性赋值
4、创建对象
对象是数据,装在变量里。
Student s1=new Student("L",35,50);
Student s2=new Student();
难点
简单变量:存值 对象变量(引用) :存对象的地址 看变量类型
实例变量 局部变量 看位置
5、引用
对象变量(引用) :存对象的地址 ,引用指向了一个对象,来判断 。
package day1;
public class TestReference{
public static void main(String[] args){
/*int a=10;
int b=a;
b++;
System.out.println(a);
*/
/*Student s1=new Student();
Student s2=s1;
s2.age++;
System.out.println(s1.age);//21
*/
int m=10;
changeInt(m);
System.out.println(m);//10
}
static void changeInt(int a){
a++;
}
}
class Student{
int age=20;
}
6、this 关键词
1)引用 当前对象 你对谁调方法,谁就是当前对象。
当实例变量和局部变量命名冲突的时候,用this.表示实例变量。
2)用在构造方法中 this(…)调用本类的其他构造方法。this.()必须在类的第一个语句上。
有参构造方法中去调用无参构造方法
构造方法不能手工调用
this()
package chp5;
public class TestThis{
public static void main(String[] args){
/*Teacher t1=new Teacher();
t1.name="Huxz";
Teacher t2=new Teacher();
t2.name="liucy";
t1.print();
t2.print();
*/
new Teacher("Hxz");
}
}
class Teacher{
String name;
public void print(){
String name="Zhang3";
System.out.println(this.name);
System.out.println(name);
}
public Teacher(){
System.out.println("Teacher()");
}
public Teacher(String name){
this();
this.name=name;
}
}
clss Worker{
String name;
int age;
double salary;
boolean gender;
publin Worker(String name,int age,double salary){
this.name=name;
this.age=age;
this.salary=salary;
}
publin Worker(String name,int age,double salary,boolean gender){
this(name,age,salary);
this.gender=gender;
}
}
**chp6 三大特性
封装 继承 多态
7、封装:**
对象的边界对对象的内部起到保护的作用:
数据隐藏
public 公开的 不受边界的约束
private 私有 只能在本类内部访问 无法突破边界
属性私有 提供公开的setXXX/getXXX用来访问属性
方法私有 只给自己调用
方法公开:声明公开 实现隐藏
实现的改变对架构的影响最小
数据左移一位与数据*2是一样的
a*2 a<<1
package chp6;
public class TestEncapsulation{
public static void main(String[] args){
CreditCard card=new CreditCard();
System.out.println(card.getPassword());
//card.password="1234";
card.setPassword("1234");
//card.password="1234";
//card.password="654321";
System.out.println(card.getPassword());
}
}
class CreditCard{
private String password="123456";
public String getPassword(){
return password;
}
public void setPassword(String password){
if(password.length()!=6)return;
this.password=password;
}
}
8、继承
父类–子类 一般–特殊 父类:子类的共性抽象出来
动物 狗 猫
关键字 extends
创建子类对象要首先创建父类对象。
父类对象包含在子类对象当中。
所有的子类能够访问的父类属性和方法,即是子类从父类中继承的属性和方法。