您的位置:首页 > 其它

文章标题

2015-04-05 12:58 351 查看

面向对象

一种抽象的编程模型

将复杂问题分解成一个一个独立小问题,

通过一个一个解决这些小问题,

来解决大问题



对象(实例)

引用

构造方法

this

方法重载

继承

super

多态

instanceof

抽象类

final

static

接口

内部类

可以理解成 “图纸”

是对事物、逻辑、算法、概念的抽象

将相关的数据、方法,进行封装,

封装成一个独立的程序组件

对象(实例)

可以理解成:从图纸生产出的产品

从类创建出的具体实例

每个对象都是独立的,

每个对象新建时,都会分配新的内存空间,

来保存各自的属性变量值

引用

可以理解成: 遥控器

引用变量,保存一个对象的内存地址

使用引用变量,

可以找到内存中的一个对象,

访问对象的属性值,

或控制这个对象来执行指定的方法

引用变量的特殊值: null(空)

构造方法

在新建实例时,执行的一个特殊方法

new Soldier();
new Soldier(9527);
new Light();
new Light(Color.WHITE);


作用:

*) 不知道

*) 构造方法中可以自己编写任何代码

*) 常见写法:初始化成员变量

一个类必须有构造方法

不定义构造方法,编译器会添加默认构造方法

public class A {
//public A() {
//}
}


允许定义不同参数的多个构造方法

public class A {
public A() {
}
public A(int i) {
}
public A(int i, String s) {
}
}


练习图例:





this

用来引用成员

this.name

*) this表示当前对象,
用哪个对象调用,哪个对象就是当前对象

*) 本质是一个特殊引用,
保存当前对象的内存地址


构造方法之间调用

this(...)

*) 目的: 减少代码重复
*) 一般从参数少的构造方法,调用参数多的构造方法

参数的处理,集中在参数最多的构造方法中,
其他构造方法,调用这个构造方法的代码

*) 构造方法之间调用,必须是首行代码


方法重载

同名不同参

继承

作用: 代码重用、代码复用

子类继承父类

单继承

*) 一个类,只能继承一个父类

*) 一个父类,可以有多个子类

继承了:

*) 可见的成员

不继承:

*) 不可见的成员

*) 构造方法

*) 静态方法

创建子类对象

Student s = new Student();

1) 新建父类对象,执行父类构造方法
2) 新建子类对象,执行子类构造方法

*) 两个对象绑定在一起,
作为一个子类对象


创建子类对象,构造方法执行过程

Student s = new Student();

1) 先执行父类构造方法
*) 默认执行无参构造

super();//隐含代码

*) 也可以手动调用父类构造方法

在子类构造方法中添加:
super(参数...);

2) 再执行子类构造方法

*) 如果父类没有无参构造方法,
必须手动调用父类有参构造方法

*) 手动调用父类构造方法,
根据需要,可以选择任意的构造方法来调用


通过子类对象,调用成员

s.xxx

s.xxx()

1) 先在子类对象中查找这个成员

2) 再在父类对象中查找这个成员

*) 子类有,执行子类的;

子类没有,执行父类的。

方法重写 Override

*) 从父类继承的方法,不满足子类需要

可以在子类中重新编写这个方法

*) 可以用 super.xxx(),调用父类中的同一个方法

*) 方法签名(方法名、参数列表)必须与父类一致

*) 返回类型允许使用更小的类型

*) 访问范围不能降低

*) 抛出的异常不能更多

super

重写方法时,调用父类同一个方法

public String toString() {



super.toString()



}

手动调用父类构造方法

super(); //默认

super(参数…); //手动调用

*) 必须是首行代码

练习图例:





多态

作用: 一致的类型

类型转换

*) 向上转型

子类对象转为父类型

*) 转型之后,只能调用父类中定义的通用成员


*) 向下转型

已经转为父类型的子类对象,

再转回成子类型

instanceof

运行期类型识别

对真实类型及其父类型判断,都得到 true

Shape s = new Line();

s instanceof Line true

s instanceof Shape true

练习图例:







抽象类

作用:

*) 通用代码

*) 通用方法定义

抽象类不能创建对象

有抽象方法的类,必须是抽象类

抽象类中,不一定有抽象方法

final

可以修饰类、方法、变量

变量

变量的值不可变,称为“常量”

final int a = 10;

a = 11; //错,a变量不能被重新赋值

final Point a = new Point(3,7);

a.x = 30;//对,被引用的对象的属性可变

a = new Point(6,5);//错,a变量不能被重新赋值

方法

不能被子类重写



没有子类

static

静态

静态成员属于类,而不属于对象

静态成员应该用类名来调用(避免被误解)

静态方法中,不能调用非静态成员

什么时候使用 static?

*) 使用原则:能不用就不用

静态是“非面向对象”语法

*) 使用场景:

*) 共享的数据
*) 常量

static final PI = 3.14;

Integer.MAX_VALUE

*) 工具方法

Integer.parseInt()
String.valueOf()
Math.sqrt()


练习图例:、







练习图例2:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息