11.1 面向对象基础
网上题库 选择 判断 有利于理解
对象也称为实例
11.2 面向对象的三个基本特性
1.封装性
把对象内部复杂的内容封装起来,对外部调用者暴露一些简单接口
2.继承性
轮船 | 客轮 |
一般 | 特殊 |
父类 | 子类 |
超类(C#) |
派生类 |
C++多继承 ,一个子类可以继承多个父类,容易发生冲突
Java只是单继承,但是可以通过接口实现多继承的概念
3.多态性
一个父类可以有多个子类,这些子类继承后,可以修改或覆盖父类的方法,行为和属性
11.3 类
1. 类声明和类体(成员变量和成员方法)
[public] [abstract | final] class className [extends superclassName] [impements interfaceNameList] {
//类体
}
2. 成员变量
就是在类里声明的,但是方法之外的变量
class className{
[public | protected | private] [staric] [final] type varibleName //成员变量
}
static 类变量 共享变量
非static 实例变量
public class Animal extends Object /*implements I1,I2,I3*/{
//类体
int age = 0;
public boolean sex = false;
private static double weight = 10.0;
}
3. 成员方法
[public | protected | private] [static | final | abstract] [native] [synchronized]
type methodName(paramList) [throw exceptionList] {
//方法体
}
(1) public protected private 修饰符用于封装方法
(2)static 用于声明静态方法 ,所以静态方法也称为 类方法
(3)final | abstract 不能同时用 ,final修饰的方法不能在子类中被覆盖;
abstract用来修饰抽象方法, 抽象方法必须在子类中被实现
(4)native修饰的方法,被称为 “本地方法”;“本地方法”调用本地平台代码(如C C++编写的代码) ,不能实现跨平台;
(5)synchronized 修饰的方法是同步的,当多线程方式同步方法时,只能串行地执行,保证线程是安全的
11.4 包
1. 包作用
提供了一个命名空间,防止类,接口,枚举,注释等命名冲突,
2. 包定义
package pkg1 [. pkg2 [.pkg3...]] ;
//数字开头不合法,加上”a"
3. 包引入
4. 常用包
1) java.lang 包: 不需要引入
2) java.io包: 提供多种输入/ 输出流类,如:InputStream, OutputStream,Reader,Writer
文件管理相关类和接口:File和FileDescriptor类i以及FileFilter接口
3) java.net:进行网络相关操作的类: URL,Socket和ServerSocket
4) java.util包:一些实用工具类和接口,如集合,日期,和日期相关类和接口
5)java.text包:文本处理,日期格式化和数字格式化等相关类和接口
6) java.awt和javax.swing:提供了java图形用户界面开发所需要的各种类和接口
java.awt 提供了基础的,java.swing 提供了高级组件
11.5 方法重载
方法名相同,参数列表不同(个数不同或者类型不同)
返回值 不决定 方法是否重载
11.6 封装性与访问控制
1. 私有级别 ( private)
它所修饰的成员变量和方法,只能在同一个类
2.默认级别 (无修饰符)
所谓的访问成员变量和方法,有两种方式:
一个是通过类或对象调用方式。
一个是通过继承
3.保护级别(protected)
在同一个包中与默认级别没有区别;
在不同包中采用继承方式可以访问,
4. 公有级别 (public)
访问类成员时,在能满足使用的前提下,尽量限制类中成员的访问级别, 私有-------> 默认------> 保护----->公有
11.7 静态变量与静态方法
Account(银行账户)类,假设它有三个成员变量:amount(账户金额),interestRate(利率)
和owner(账户名)。amount和owner是因人而异的,但是所有的interestRate是相同的。
所有个体都一样的变量称为 “类变量” 或 “静态变量”, 可理解为共享变量
访问静态变量和静态方法,可以用 类名.xxx 或者 实例名.xxx (其他语言中不一定可以)
// 实例变量 账户金额,
double amount = 0;
// 实例变量 账户名
String owner;
// 静态变量 利率
static double interestRate = 0.0668;
// 静态方法
public static double interestBy(double amt) {
// 静态方法可以访问静态变量和其他静态方法
return interestRate * amt;
// 不可以访问实例变量和实例方法
// int i = amount;
}
// 实例方法
public String messageWith(double amt) {
// 实例方法可以访问实例变量,实例方法,静态变量,静态方法
double interest = Account.interestBy(amt);
StringBuilder sb = new StringBuilder();
// 拼接字符串
sb.append(owner).append("的利息是").append(interest);
// 返回字符串
return sb.toString();
}
总结:1.静态方法可以访问静态变量和其他静态方法,但不能访问实例变量和实例方法;
2.实例方法可以访问静态变量和其他静态方法,实例变量和实例方法;
11.8 静态代码框
静态代码块所在类 第一次使用时调用静态代码块,
静态代码块在程序运行过程中只调用一次,他的作用是用来初始化静态变量的