面向对象编程(一)

一、继承

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. android之多媒体篇(三)

    录像 Android提供了2种方案去录像. 方案一: 最简单的方式就是使用Intents去启动App来帮助你完成.这个方案使你能够指定输出的位置和视频的质量.这方案通常是最好的方法,应该可以用在多种情 ...

  2. C++中的inline函数

    内联函数: () 内联函数定义和作用: 将一个函数声明为inline,那么函数就成为内联函数.内联函数通常就是它在程序中每个调用点上“内联地”展开.从定义上看,内联函数跟一般函数不一样,一般函数调用的 ...

  3. Ruby on Rails Tutorial 第六章 用户模型

    1.用户模型(1)数据库迁移Rails默认使用关系数据库存储数据,数据库中的表有数据行组成,每一行都有相应的列,对应数据属性.把列名命名为相应的名字后,ActiveRecord会自动把他们识别为用户对 ...

  4. debian7安装oracle11g

    1,安装必须包 apt-get install gcc g++  make binutils libc6 libc6-dev libstdc++6 libstdc++5 rpm gawk alien ...

  5. 正确率、召回率和 F 值

    原文:http://peghoty.blog.163.com/blog/static/49346409201302595935709/ 正确率.召回率和 F 值是在鱼龙混杂的环境中,选出目标的重要评价 ...

  6. Java_maven构建项目(多模块项目)

    在eclipse下构建maven项目,该项目由多个子模块组成. 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入ne ...

  7. 小白日记21:kali渗透测试之提权(一)--本地提权

    本地提权 简单地说,本地提权漏洞就是说一个本来非常低权限.受限制的用户,可以提升到系统至高无上的权限.权限提升漏洞通常是一种"辅助"性质的漏洞,当黑客已经通过某种手段进入了目标机器 ...

  8. Socket的使用

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...

  9. Android(java)学习笔记93:Android布局详解之一:FrameLayout

    FrameLayout是最简单的布局了.所有放在布局里的控件,都按照层次堆叠在屏幕的左上角.后加进来的控件覆盖前面的控件. 在FrameLayout布局里,定义任何空间的位置相关的属性都毫无意义.控件 ...

  10. 网站安全通用防护代码(C#版本源码提供)

    每一个开发者都会意识到,网站发布之前,需要进行安全检查. 那么如何拦截攻击者注入恶意代码?如何防御诸如跨站脚本攻击(XSS).SQL注入攻击等恶意攻击行为? 针对目前常见的一些安全问题,结合目前一些常 ...