java面向对象知识点总结

  • 格式:docx
  • 大小:17.34 KB
  • 文档页数:14

1 类和对象

类:

类是用来描述一类事物的共性内容的, 类是抽象的;

创建类,如何描述

属性 功能

用变量来描述属性

用方法来描述功能

对象:

就是现实中具体的事物,对象是具体的;

创建对象

类名 对象名 = new 类名();

如何通过对象访问类中属性和方法呢?

对象名.变量名

对象名.方法名();

只要是new的对象,就是新创建的,就会在内存中开辟一段单独的空间

匿名对象

创建的对象没有赋值给具体的变量; 所以给匿名对象的属性赋值是没有任何意义的;

匿名对象使用场景

1 调用方法

2 作为参数传递

3 添加进容器中

This 关键字

This. 类中的普通方法访问到的成员前边都有this.这个关键字

This. 就代表当前对象,

普通方法, 创建对象调方法, 谁调用就代表谁

This(); 可以用来在构造函数中调用本类与之相对应的构造函数

使用注意事项:

1 this() 只能是构造函数的第一条执行语句

2 this() 不能在构造函数之间相互调用

3 this() 不能调用自己

构造函数(方法)

构造函数的作用

用来给对象进行初始话的(初始化就是指给对象的各个属性赋值)

构造函数何时执行

对象一创建就会调用与之相对应的构造函数

构造函数语法

修饰符 没有返回值类型 类名(参数列表){

具体执行的代码

}

构造函数自动添加

当一个类中我们没有明确指定构造函数的话,jvm会自动帮我们添加一个空参数的构造,

如果我们指定了,就不添加了

构造函数和普通函数的区别

执行时机不同

对象一创建就会调用与之相对应的构造函数

普通函数只有被调用才会执行

return

1 就是用来在方法中返回具体结果(结果类型必须和方法的返回值类型一致)

2 即便方法的返回值类型是void,方法中也可以出现 return;

3 构造函数中也可以有return关键字

成员变量 和 局部变量

1 作用范围不同, 成员变量是定义在类中的,在整个类中都起作用

局部变量是定义在方法中的,在所在代码块起作用

2 初始值不同,成员变量有默认初始值,不用赋值,也能直接时候

局部变量,没有初始值,必须得赋值以后才能使用

2 封装

static

Static 是用来修饰类中成员 成员变量 成员方法

被static修饰的成员,就多了一种调用方式,可以被类名直接调用了

修饰成员变量

该变量在内存中只会保存一份,被类和所有对象共享, 那么一个对象对其进行修改,会影响到其他对象,为了不影响其他对象,经常会把静态变量搞成常量,被final修饰;

修饰成员方法

静态方法中只能访问静态成员

普通方法中都能访问;

静态方法中不能出现this,super关键字

Main函数是静态的;

那么我们定义方法时,什么时候定义静态,什么时候定义非静态?

当方法中使用到了普通(非静态)成员的话,就不能定义成静态的;

static代码块 (静态代码块)

用来给类进行初始话 (给类中的静态成员进行初始化)

会随着类的加载而执行(只会执行一次)

封装

就是隐藏类中的某些成员;仅对外提供公共的访问方式

封装三步走:

1 私有属性

2 提供set和get方法供外界给对象设置值和获取值

3 在方法中添加具体的存取限制

包和权限修饰符

权限修饰符可以用来修饰两种东西:

Public 该类在其他包中也可以访问 (首先要导包 import)

默认

类中成员

Public protected 默认 private

本类中是否能访问 本包其他类 其他包

Public 能 能 能

默认 能 能 不能

Private 能 不能 不能

1 创建包

2 声明包 package 导入包 import 包的作用

1 便于管理

2 防止命名冲突;

3 包 也是封装的一种方式,可以在更广的范围保护类

3 继承

某个类 可以 通过 extends 继承其他的类

一个类继承了另外一个类以后,就继承了所有的非私有的属性和方法

注意事项

1 java中只允许单继承; 不允许多继承, 但是允许多层继承

2 何时继承? A is B;

继承发生以后类中成员的特点

1 成员变量

当子类和父类的成员变量同名是,子类中优先使用子类自己的. 可以通过super.调用父类的成员变量和成员方法;

2 成员方法

子父类具有相同的功能,但是子类有自己具体的实现,这个时候子类是没有必要重新定义一个方法的,只需要重写父类就行了;

重写 (覆盖)

1 前提, 存在继承 和 实现关系

2 方法名一样,参数列表一样,返回值类型一样(jdk5以后要求子类的返回值类型是父类返回值类型的子类也行)

3 子类方法的权限不能小于父类

4 子类方法不能抛出比父类更多的异常

重载

同一个类中,方法名一样,参数列表不一样(参数数量, 参数类型),与返回值类型无关

3 构造函数

1 构造函数是不能继承的;

2 但是子类可以在构造函数中通过super()调用父类与之相对应的构造

3 如果子类构造函数首行没有明确指定this(), super(“”);这样的语句的话,其实是有一天隐式语句 super(),调用父类空参数构造,如果父类没有空参数构造的话,子类是会报错的;

4 如果子类首行有this() 这样的语句的话,就没有隐式语句super();

5 不论子类的第一行有没有this(),super(); 创建子类对象的时候一定会调用到父类的某个构造;

4 与上帝相关 Object

1 任何类 java中自带的类,或者是我们自定义的类,都直接或间接的继承自Object;

2 如果某个类没有明确指定 父类的话,那么这个类就默认继承自Object;

3 所有Object中定义的方法所有java对象都可以调用

4 比如toString() equals(Object object)

5 直接打印对象的话.我们发现出现的是对象的内存地址值,因为打印对象就是打印的对象的toString()方法的返回值. 而Object身上定义的toString方法返回的就是对象的内存地址值,

这个时候这需要我们重写toString方法以后, 调用的就是子类自己的toString方法了

5 抽象类

1 发现该类事物都具备该功能,但是不确定如何实现,就可以定义成抽象方法

2 抽象方法特点 没有方法体, 被abstract修饰

3 如果一个类中有抽象方法,这个类也必须得是抽象类

4 如果一个类继承了抽象类以后,这个类要么是抽象的,要么必须实现抽象类中的所有抽象方法

5 抽象类和普通类的不同;

抽象类不能被实例化对象;

6 为什么不能实例化对象

因为创建对象以后就可以通过对象调用抽象类中没有方法体的抽象方法了,这样是没有意义的,为了不让调用,干脆就不让创建对象了;

7 抽象类有没有构造函数?

抽象类天生就是被继承的,然后创建子类对象的时候一定会调用到父类构造

8 抽象类中可以没有抽象方法;

6 Final

1 常量 不能重新赋值

2 类 该类不能被继承 不能派生子类

3 方法 该方法不能被重写(覆盖)

7 Abstract 修饰方法 和三个关键字冲突

1 final

2 static

3 private

8 super关键字

1 super. 指代父类对象的引用 可以通过super.调用父类的属性和方法

2 可以通过super() 在构造函数中调用父类与之相对应的构造函数 4 多态

多态的体现

Animal animal = new Pig();

父类的引用指向了子类对象

左边声明的是父类,右边创建的是子类;

多态的前提

存在继承或 实现关系

多态的好处

简化了代码;

大大提高了程序扩张性;

多态的弊端

只能调用父类共有的方法,不能调用子类特有的方法

多态的应用

Animal animal = new Pig();

能不能调用看左边, 具体调用谁的看右边;

非要调用子类特有的方法需要强转, 向下转型:

强制把父类的应用转成子类对象 ;

向下转型容易出问题, 为了防止类型映射异常,最好在强转以前进行类型判断;

Instanceof

多态的应用场景

定义方法的时候,形式参数的类型声明为父类,这样调用方法的时候就可以传递该父类的任意子类对象进来了;

以父类作为方法的返回值类型,

5 接口

1 如何定义一个接口, interface

2 初期理解,接口就是里边都是抽象方法的抽象类

3 接口中成员 接口中只能有两种成员

抽象方法

静态常量

4 接口中的成员都有固定的修饰符,可以省略

抽象方法的 public abstract

静态常量的 public final static

5 接口和抽象类都不能实例化对象

6 接口是没有构造函数的,

7 接口支持多实现 implements A,B,C ,D