java基础复习之面向对象语法基础
来源:互联网 发布:文件自动加密软件 编辑:程序博客网 时间:2024/05/17 05:19
面向对象
======================================
* 将复杂问题分解,
分解成一个一个的独立的小问题,
通过解决每个小问题,
最终解决复杂问题
* 封装、继承、多态
类
对象(实例)
引用
构造方法
this
重载
继承
super
重写
多态
向上向下转型
instanceof
抽象类
访问控制符
final
static
接口
内部类
* 类比成“图纸”
* 对事物、逻辑、算法、概念的抽象
* java 类型系统中,是一种新的类型
* 类比成“从图纸生产出的产品”
* 从类创建的实例
* 每个对象,都是独立的,
占用独立的内存空间
在它的内存控件中,保存独立的属性值
可以独立的执行运算
* 类比成“遥控器”
* 引用类型变量
保存一个实例的内存地址
* 特殊值: null
空,不保存任何实例的内存地址
* 新建实例时执行的一个特殊方法
new Soldier();
new Soldier(9527);
new Soldier(9527, 200);
* 可以添加任意参数的构造方法
* java 的任何类,都必须有构造方法
* 如果不编写构造方法,
编译器编译时,会添加默认构造方法
class A {
//如果不写,编译时添加默认构造方法:
public A() {
}
}
* 构造方法的作用:
*) 不知道,
在构造方法中,可以编写任意代码
*) 常见用法:
对成员变量初始化(即赋值)
* 实例中的特殊引用,
通过 this 可以找到当前实例的内存地址
* 构造方法之间调用
this(参数)
*) 减少重复代码
*) 必须是构造方法中的首行代码
* 同名不同参
* 作用: 代码重用、代码复用
* A 继承 B
*) A 是 B 的子类
*) B 是 A 的父类
* 单继承
*) 子类只能有一个父类
*) 父类可以有多个子类
* 新建子类实例时:
---------------------------------
1) 新建父类实例,执行父类构造方法
2) 新建子类实例,执行子类构造方法
*) 两个实例捆绑在一起作为一个子类实例
*) 访问成员时,现在子类中查找,再到父类中查找
* 新建子类实例时,构造方法如何执行
---------------------------------
*) 默认执行父类无参构造方法
super();
*) 可在子类构造方法中,
手动调用父类有参构造方法
super(参数);
* 方法重写 Override
---------------------------------
*) 从父类继承的方法对子类不适用,
可以在子类中重新编写这个方法
*) 签名(方法名、参数列表)必须一致
*) 返回类型不能变大或改为其他类型
*) 抛出的异常不能更多
*) 可以复用父类中同一个方法的代码
super.xxxx();
1. 子类构造方法调用父类构造方法
super() 隐含调用
super(参数) 手动调用
*) 必须是构造方法的首行代码
2. 重写方法时,调用父类同一个方法
super.xxxx();
* 作用: 一致的类型
* 类型转换
*) 向上转型
子类实例,可转为父类型
*) 向上转型后,只能调用父类定义的通用成员
*) 向下转型
转为父类型的子类实例,
再转回成子类型
* instanceof
运行期类型识别
*) 对真实类型及其父类型判断
都返回 true
Shape s = new Line();
s instanceof Line true
s instanceof Shape true
* 作用:
1) 为子类提供通用代码
2) 为子类提供通用方法定义
* 半成品类
* 有的方法有代码
有的方法没有代码,没有实现
* 有抽象方法的类,必须是抽象类
* 抽象类中,不一定有抽象方法
* 抽象类不能创建实例
* 对类或成员进行访问范围限制
本类 本包 子类 任意
public O O O O
protected O O O
[default] O O
private O
* 访问控制符使用原则:
尽量小范围访问
*) 公开的成员,是与其他开发者的一个契约
*) 公开的成员,会尽量保持稳定不变
* 可以修饰变量、方法、类
* 变量
-----------------------------------
* 变量的值不可变,称为“常量”
final int a = 10;
a = 11;//错,a 一旦赋值,不能改变
final Point a = new Point(2,3);
a.x = 20;//对,引用的实例的成员可变
a = new Point(1,2);//错,引用变量a中保存的内存地址不可变
* 方法
不能被子类重写
* 类
不能被继承
* 静态
* 静态的成员,属于类,而不属于实例
* 应该使用类名调用静态成员
Integer.MAX_VALUE
Math.pow(a,b)
* 静态代码块中,不能访问非静态成员
* 静态初始化块
class A {
static {
//第一次用到 A 类
//加载 A 类时执行
//只执行一次
}
}
* 什么时候使用静态
----------------------------------------
* 原则: 能不用就不用
静态是“非面向对象”语法
* 使用场景:
------------------------
*) 共享的数据
Integer.MAX_VALUE
Math.PI
*) 工具方法
Integer.parseInt()
Math.pow()
Math.sqrt()
=====================================
* java 中定义常量通常使用 static final
static final byte MAX_VALUE=127;
*) final 不可变
*) static 内存中只存在一个地址,节省内存
* 命名习惯:
全大写
单词之间用下划线
* 作用:
结构设计工具
用来解耦合
* 极端的抽象类
* 用 interface 代替 class
* 用 implements 代替 extends
* 接口中只能定义:
*) 公共的抽象方法
*) 公共的常量
*) 公共的内部类、内部接口
* 接口可以多实现
class A extends Xxx impelents B,C,D {
}
* 接口之间继承
interface A extends B,C,D {
}
* 定义在类内,或方法内,或局部代码块内的类
* 非静态内部类
非静态内部类的实例,依赖于外部类实例存在
class A {
class Inner {
}
}
A a = new A();
A.Inner i = a.new Inner();
A.Inner i = new A().new Inner();
* 静态内部类
class A {
static class Inner {
}
}
A.Inner i = new A.Inner();
* 局部内部类
class A {
Weapon a() {
class Inner implents Weapon {
}
Inner i = new Inner();
return i;
}
}
A a = new A();
Weapon w = a.a();
* 匿名内部类
Weapon w = new Weapon() {
...
};
* 局部内部类中使用外面的局部变量,必须加 final
======================================
* 将复杂问题分解,
分解成一个一个的独立的小问题,
通过解决每个小问题,
最终解决复杂问题
* 封装、继承、多态
类
对象(实例)
引用
构造方法
this
重载
继承
super
重写
多态
向上向下转型
instanceof
抽象类
访问控制符
final
static
接口
内部类
类
==================================* 类比成“图纸”
* 对事物、逻辑、算法、概念的抽象
* java 类型系统中,是一种新的类型
对象(实例)
==================================* 类比成“从图纸生产出的产品”
* 从类创建的实例
* 每个对象,都是独立的,
占用独立的内存空间
在它的内存控件中,保存独立的属性值
可以独立的执行运算
引用
==================================* 类比成“遥控器”
* 引用类型变量
保存一个实例的内存地址
* 特殊值: null
空,不保存任何实例的内存地址
构造方法
=======================================* 新建实例时执行的一个特殊方法
new Soldier();
new Soldier(9527);
new Soldier(9527, 200);
* 可以添加任意参数的构造方法
* java 的任何类,都必须有构造方法
* 如果不编写构造方法,
编译器编译时,会添加默认构造方法
class A {
//如果不写,编译时添加默认构造方法:
public A() {
}
}
* 构造方法的作用:
*) 不知道,
在构造方法中,可以编写任意代码
*) 常见用法:
对成员变量初始化(即赋值)
this
=======================================* 实例中的特殊引用,
通过 this 可以找到当前实例的内存地址
* 构造方法之间调用
this(参数)
*) 减少重复代码
*) 必须是构造方法中的首行代码
方法重载 Overload
=======================================* 同名不同参
继承
=======================================* 作用: 代码重用、代码复用
* A 继承 B
*) A 是 B 的子类
*) B 是 A 的父类
* 单继承
*) 子类只能有一个父类
*) 父类可以有多个子类
* 新建子类实例时:
---------------------------------
1) 新建父类实例,执行父类构造方法
2) 新建子类实例,执行子类构造方法
*) 两个实例捆绑在一起作为一个子类实例
*) 访问成员时,现在子类中查找,再到父类中查找
* 新建子类实例时,构造方法如何执行
---------------------------------
*) 默认执行父类无参构造方法
super();
*) 可在子类构造方法中,
手动调用父类有参构造方法
super(参数);
* 方法重写 Override
---------------------------------
*) 从父类继承的方法对子类不适用,
可以在子类中重新编写这个方法
*) 签名(方法名、参数列表)必须一致
*) 返回类型不能变大或改为其他类型
*) 抛出的异常不能更多
*) 可以复用父类中同一个方法的代码
super.xxxx();
* super
---------------------------------1. 子类构造方法调用父类构造方法
super() 隐含调用
super(参数) 手动调用
*) 必须是构造方法的首行代码
2. 重写方法时,调用父类同一个方法
super.xxxx();
多态
=========================================* 作用: 一致的类型
* 类型转换
*) 向上转型
子类实例,可转为父类型
*) 向上转型后,只能调用父类定义的通用成员
*) 向下转型
转为父类型的子类实例,
再转回成子类型
* instanceof
运行期类型识别
*) 对真实类型及其父类型判断
都返回 true
Shape s = new Line();
s instanceof Line true
s instanceof Shape true
抽象类
=======================================* 作用:
1) 为子类提供通用代码
2) 为子类提供通用方法定义
* 半成品类
* 有的方法有代码
有的方法没有代码,没有实现
* 有抽象方法的类,必须是抽象类
* 抽象类中,不一定有抽象方法
* 抽象类不能创建实例
访问控制符
============================================* 对类或成员进行访问范围限制
本类 本包 子类 任意
public O O O O
protected O O O
[default] O O
private O
* 访问控制符使用原则:
尽量小范围访问
*) 公开的成员,是与其他开发者的一个契约
*) 公开的成员,会尽量保持稳定不变
final
===========================================* 可以修饰变量、方法、类
* 变量
-----------------------------------
* 变量的值不可变,称为“常量”
final int a = 10;
a = 11;//错,a 一旦赋值,不能改变
final Point a = new Point(2,3);
a.x = 20;//对,引用的实例的成员可变
a = new Point(1,2);//错,引用变量a中保存的内存地址不可变
* 方法
不能被子类重写
* 类
不能被继承
static
=============================================* 静态
* 静态的成员,属于类,而不属于实例
* 应该使用类名调用静态成员
Integer.MAX_VALUE
Math.pow(a,b)
* 静态代码块中,不能访问非静态成员
* 静态初始化块
class A {
static {
//第一次用到 A 类
//加载 A 类时执行
//只执行一次
}
}
* 什么时候使用静态
----------------------------------------
* 原则: 能不用就不用
静态是“非面向对象”语法
* 使用场景:
------------------------
*) 共享的数据
Integer.MAX_VALUE
Math.PI
*) 工具方法
Integer.parseInt()
Math.pow()
Math.sqrt()
常量
=====================================* java 中定义常量通常使用 static final
static final byte MAX_VALUE=127;
*) final 不可变
*) static 内存中只存在一个地址,节省内存
* 命名习惯:
全大写
单词之间用下划线
接口
=====================================* 作用:
结构设计工具
用来解耦合
* 极端的抽象类
* 用 interface 代替 class
* 用 implements 代替 extends
* 接口中只能定义:
*) 公共的抽象方法
*) 公共的常量
*) 公共的内部类、内部接口
* 接口可以多实现
class A extends Xxx impelents B,C,D {
}
* 接口之间继承
interface A extends B,C,D {
}
内部类
=====================================* 定义在类内,或方法内,或局部代码块内的类
* 非静态内部类
非静态内部类的实例,依赖于外部类实例存在
class A {
class Inner {
}
}
A a = new A();
A.Inner i = a.new Inner();
A.Inner i = new A().new Inner();
* 静态内部类
class A {
static class Inner {
}
}
A.Inner i = new A.Inner();
* 局部内部类
class A {
Weapon a() {
class Inner implents Weapon {
}
Inner i = new Inner();
return i;
}
}
A a = new A();
Weapon w = a.a();
* 匿名内部类
Weapon w = new Weapon() {
...
};
* 局部内部类中使用外面的局部变量,必须加 final
0 0
- java基础复习之面向对象语法基础
- Java 面向对象基础语法
- Java面向对象语法基础
- 黑马程序员 java基础复习二 之面向对象
- 黑马程序员--java基础复习之面向对象
- Java基础复习:面向对象练习1
- Java基础复习---面向对象程序设计
- JAVA基础复习六-面向对象
- JAVA基础复习七-面向对象二
- 黑马程序员--Java基础语法之面向对象
- 复习(java):语法:基础
- java面向对象上:java基础语法
- 复习(java):语法:面向对象
- java基础之面向对象
- Java基础之面向对象
- Java基础之面向对象
- Java基础之面向对象
- java基础之:面向对象
- from c to c++: using the boolean
- leetcode-6 ZigZag Conversion
- 二叉排序树
- 怎么增加新浪微博阅读量
- Archlinux中IO占用高而不退
- java基础复习之面向对象语法基础
- sql server dbnetlib 不存在或者拒绝服务解决方案
- JavaScript中判断日期是否相等
- 态度
- 学习实现马赫带效果
- 用editplus编写python
- Android 反编译
- (5.1.1)计算机网络之概述
- Classical Maths Books Intro