面向对象编程(一)

一、继承

1. 在类图表示中,使用一个分为三块的矩形表示一个类。矩形的第一块表示类名,第二块描述这个类的属性及属性的数据类型,第三块描述这个类的操作,也就是方法以及返回类型。            

2. 访问控制

修饰符      类自身  同包内  子类   所有其他类

private    Yes

default    Yes     Yes

protected  Yes     Yes     Yes

public     Yes     Yes     Yes      Yes

3. 覆盖方法的注意点:

方法覆盖必须保证方法名、返回类型、参数列表都必须相同。另外,子类中的覆盖方法的可访问范围不能比其在父类中被覆盖的方法的访问范围小

4.  方法的重载必须注意:

Ø    方法名必须相同

如果方法名都不同,重载方法就根本无从谈起。

Ø    参数列表必须不同(参数的类型或者个数不同即可)

调用语句的参数列表之间的差别必须足够清晰。例如println(inti)  println(int k)就完全不是重载,而是重复了,虽然参数名称不同,但参数列表的类型是相同的。

返回类型可以不同,也可以相同

5. 可变参数的方法:

public double avg(int... nums){}

6. 调用父类构造器:

注意:a.super()或this()调用必须放在构造器的第一行。然而,super 和this 调用不能同时显式存在在同一个构造器内,如果显式调用了super,就不能再写this 调用;同样有了this 调用就不能显示调用super。

b.不能继承构造器。尽管子类从父类集成了所有方法和变量,但它不能继承构造器。一个类只有两种方法获得构造器:编写构造器或者由于没有编写任何构造器而获得一个默认构造器。子类只能调用父类构造器。

7. 构造和初始化对象的完整过程:

对象初始化是一个相当复杂的过程。首先,为整个对象分配内存和为属性赋默认初始值。(静态变量优先于普通变量)然后,调用顶层构造器,并且按照如下步骤递归继承树:

1、绑定构造器参数

2、如果显式调用this(),递归调用,然后跳至第5 步

3、递归调用隐式或显式的super(…)(Object 除外,因为Object 没有父类,Object 是所有类的父类,将在下一节作详细介绍)。

4、执行显式的实例变量初始化。

5、执行当前构造器的构造体。

例:构造new Manager(1, “Burns”, 10000, 8000)的步骤

1. 基本初始化

1.1为整个Manager对象分配内存

1.2将所有属性初始化为默认初始值

2. 调用构造器:Manager(int id, String name, double salary, double bonus)

2.1绑定构造器参数 id=1, name=“Burns”, salary=10000, bonus=8000

2.2没有显式的this()调用

2.3调用 Employee(int id, String name, double salary)的super(id, name, salary)

2.3.1 绑定构造器参数 id=1, name=“Burns”, salary=10000

2.3.2 没有显式的this()调用

2.3.3 隐式调用Object的super()

2.3.3.1 不需要参数绑定

2.3.3.2 没有this()调用

2.3.3.3 没有super()调用(Object是根)

2.3.3.4 没有Object的显式变量初始化

2.3.3.5 没有要调用的方法体

2.3.4 显式初始化Employee属性(如果没有则继续使用默认初始值)

2.4显式初始化Manager的属性

2.5执行构造体this.bonus = 8000;

8. Object 类

Java 中,只有基本数据类型不是对象,其他每个类、数组等都是由Object 类扩展而来的

9. 强烈建议给每个自定义类增加一个toString方法。这样在调试过程中可以随时输出对象的状态信息,而且对团队开发的所有使用到该类的程序员有利。

二、 多态

1.多态的声明:

Employee m = new Manager(); //也是合法的

但是这个时候使用变量m,只能访问Employee 中的属性和调用Employee 类中声明的方法,而Manager部分的属性和方法被隐藏。例如:

m.setBonus(8000); //错误

2.虚方法调用:

如果出现如下情况:

Employee e = new Manager();

e.getDetails();

事实上虽然声明的e 是Employee 类型,但实际上实例化出来的是Manager 对象。也就是说,获得的是运行时与变量引用的对象相关的行为而不是编译时的变量类型决定的。这一行为通常称为虚拟方法调用。上面的示例中,执行的e.getDetails()源于对象的真实类型Manager,它将执行Manager 的getDetails()方法。

3.多态参数

多态参数是一个可以接受普通对象的方法参数,这种参数除了可以接收某个类的对象外还能接收该类任意子类的对象。

4.异类集合

Employee[] emp = new Employee[3];

emp[0] = new Employee(1, “Homer”, 6000);

emp[1] = new Manager(2, “Jam”, 8000);

emp[2] = new Programmer(3, “Fred”, 6000);

5. Wrapper 类,装箱和拆箱

a.各基本数据类型对应的Wrapper 类:

基本     Wrapper   默认值

byte     Byte        0

short    Short       0

int      integer     0

long     Long        0L

double   Double      0.0D

float    Float       0.0F

char     character   ‘\u0000’

Boolean  Boolean     false

拆包、装包:

int myInt = 100;

Integer wInt = new Integer(myInt);

int p2 = wInt.intValue();

//把基本数据转换成字符串引用类型

String s = String.valueOf(100);

int x = Integer.valueOf(s).intValue();

或者

//取得字符串引用数据类型的数值

int x = Integer.parseInt(s);

三、 枚举

public enum Season

{

SPRING("Spring"),

SUMMER("Summer"),

FALL("Fall"),

WINTER("Winter");

private String name;

private Season(String name)   //必须标记为private,只在枚举类内部使用

{

this.name = name;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

}

PS:

1.  * 正则表达式语法

*

* 字符

x 字符 x

字符类

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

边界匹配器

^ 行的开头

$ 行的结尾

Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

Logical 运算符

XY X 后跟 Y

X|Y X 或 Y

(X) X,作为捕获组

*/

2. Integer num4 = 128;//autoBoxing 自动打包

Integer num5 = 128;

System.out.println(num4 == num5); //false

因为//-128~127 cache赋值     之外的为new XXX(value)

JAVA_SE复习(OOP1)的更多相关文章

  1. 7.JAVA_SE复习(文件)

    文件和流 1.什么是节点流和处理流 InputStream & OutputStream Reader & Writer 乃节点流, 前面加File之类的名词 的节点流 其余加动词的均 ...

  2. 6.JAVA_SE复习(集合)

    集合 结构图: 总结: 1.集合中的元素都是对象(注意不是基本数据类型),基本数据类型要放入集合需要装箱. 2.set与list的主要区别在于set中不允许重复,而list(序列)中可以有重复对象. ...

  3. JAVA_SE复习(多线程)

    线程 1.两种创建线程的方式都有自身的优点.  实现 Runnable 接口的优点:  从面向对象的设计观点看,Thread 类严格来讲是一个虚拟CPU 的封装,因此只有要改变或扩展该CPU 模型 ...

  4. JAVA_SE复习(异常)

    异常.调试和断言 一. 异常的分类 1. 可查异常    例: 2. 不可查异常  例:Runtime Exception 3. 异常的分类结构: 1. 不执行finally 子句的唯一情况是虚拟机关 ...

  5. JAVA_SE复习(OOP2)

    面向对象编程(二) 一.static 关键字 静态属性 1.不能覆盖静态方法.要被覆盖的方法必须是非静态的.在继承链中具有相同方法名的两个静态方法是两个互相独立的类方法.调用子类的静态方法只是将父类的 ...

  6. JAVA_SE复习(Class)

    一.面向对象程序设计(OOP) 1.面向对象的程序设计是程序开发的一种方法.它将对象作为程序的基本单元,将程序和 数据封装其中,以提高软件的重用性.灵活性和扩展性 2.三个特征: 封装:隐藏信息 继承 ...

  7. JAVA_SE复习(basic)

    一.数据类型 1.基本数据类型 Ps:有效标识符:_.字母.$开头  之后可有数字 整型:byte 1 short 2 int 4 long 8  (字节) 取值范围:其范围是从负2 的该数据类型位数 ...

  8. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  9. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

随机推荐

  1. android4.0蓝牙使能的详细解析

    本文详细分析了android4.0 中蓝牙使能的过程,相比较android2.3,4.0中的蓝牙最大的差别在于UI上on/off的伪开关.在android4.0中加入了 adapter的状态机.所谓的 ...

  2. 关于更改apache和mysql的路径的问题..

    1.禁用selinux 系统管理->selinux管理->enforing模式..改为disable..然后重启 2.修改httpd.conf的各个路径 索引后发现指向欢迎页面则注释下面这 ...

  3. 《Linux内核设计与实现》读书笔记

    http://www.cnblogs.com/wang_yb/tag/linux-kernel/

  4. Jordan Lecture Note-11: 典型相关分析(Canonical Correlation Analysis, CCA).

    典型相关分析 (一)引入 典型相关分析(Canonical Correlation Analysis)是研究两组变量之间相关关系的一种多元统计方法.他能够揭示出两组变量之间的内在联系. 我们知道,在一 ...

  5. Divisibility

    Description Consider an arbitrary sequence of integers. One can place + or - operators between integ ...

  6. cocos2d-x使用ant批量打包

    当项目需要在多渠道上线时,要打很多的渠道包,少则几十个,多种几百个.它们的区别一般只是渠道id或部分配置信息不同,这些信息均可写在配置文件中. 例如常见的渠道id不同,一般定义在AndroidMani ...

  7. 【Irrlicht鬼火引擎】掌握引擎使用流程,入门程序HelloWorld

    分析 一.简述使用步骤 一般而言,对于一个简单的程序,Irrlicht引擎的一般使用步骤如下: 预处理:(1)包含 <irrlicht.h> 头文件#include <irrlich ...

  8. [改善Java代码]使用匿名类的构造函数

    建议39: 使用匿名类的构造函数 阅读如下代码,看看是否可以编译: public class Client { public static void main(String[] args) { Lis ...

  9. [改善Java代码]不要只替换一个类

    建议20: 不要只替换一个类 我们经常在系统中定义一个常量接口(或常量类),以囊括系统中所涉及的常量,从而简化代码,方便开发,在很多的开源项目中已采用了类似的方法,比如在Struts2中,org.ap ...

  10. [设计模式]<<设计模式之禅>>之关于单一职责原则

    单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. 这个原则存在争议之处在哪里呢?就是对职责的定义,什么是类的职责,以及怎么划分类的职责.我们先举个 ...