索迪教育
Java编程技术基础第三章 类与对象 (一 )
索迪教育上章回顾
掌握 Java 的编程基础
标识符
Java 的关键字
数据类型和取值范围
Java 的变量
运算符
表达式
编码约定
流程控制索迪教育我们的目标
掌握类的创建
掌握方法重载
掌握构造函数和初始化对象
继承
掌握方法覆盖
掌握访问修饰符
掌握包的概念
Object类
String类索迪教育类的逻辑结构类名类的成员变量类的成员方法类的结构索迪教育类的代码结构
[类修饰符 ] class 类名
{
[成员修饰符 ] 数据类型 成员变量名;
……
[成员修饰符 ] 返回类型 方法名 (参数表 )
{
……
}
……
}
索迪教育类的成员方法
用于实现类的功能
有 main 方法的类可被执行
public static void main(String args[])
{
……
}
索迪教育函数参数的使用
基本类型作为函数参数的使用
复杂类型作为函数参数的使用
函数传递是单向的
函数是按值传递的索迪教育方法重载
方法重载是 Java实现面向对象的多态性机制的一种方式。
同一个类中多个方法有相同的名字,不同的参数列表,
这种情况称为方法重载。
返回类型不同并不足以构成方法重载。
当重载方法被调用时,编译器根据参数的类型和数量来确定实际调用哪个重载方法的版本。
索迪教育类的构造函数
构造函数名称与类名称相同
构造函数没有返回类型
其任务是在创建对象时初始化其内部状态
如果没有构造方法,编译器自动提供一个空的构造方法索迪教育方法的重载
方法重载是 Java实现面向对象的多态性机制的一种方式。
同一个类中多个方法有相同的名字,不同的参数列表,
这种情况称为方法重载。
返回类型不同并不足以构成方法重载。
当重载方法被调用时,编译器根据参数的类型和数量来确定实际调用哪个重载方法的版本。
索迪教育类的构造函数
构造函数名称与类名称相同
构造函数没有返回类型
其任务是在创建对象时初始化其内部状态
如果没有构造方法,编译器自动提供一个空的构造方法索迪教育重载的构造函数
Java 为每一个类自动提供缺省构造函数
缺省构造函数将成员变量的值初始化为缺省值
一旦创建了自己的构造函数,缺省的构造函数将不复存在。
重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。
索迪教育
Java 中的继承符合下列规则
继承是可传递的
如果 C 从 B 中派生,B 又从 A 中派生,那么 C 不仅继承了 B 中声明的成员,同样也继承了 A 中的成员
Object 类作为所有类的基类
派生类应当是对基类的扩展
派生类可以添加新的成员但不能除去已经继承的成员的定义
构造函数不能被继承
除此以外的其它成员,不论对它们定义了怎样的访问方式,都能被继承
基类中成员的访问方式只能决定派生类能否访问它们
派生类如果定义了与继承而来的成员同名的新成员,就可以覆盖已继承的成员
但这并不因为这派生类删除了这些成员,只是不能再通过派生类访问这些成员
派生类能够重写基类成员,从而实现类展示多态性
Java 中派生类只能从一个类中继承(单一继承)
索迪教育类的继承
当一个新类包含另一个类的成员变量和方法时,可以不重新编写相应代码,只要声明其继承关系
被包含的类叫超类,包含超类的类叫子类
子类可直接拥有超类的成员变量和方法
子类可定义自己的成员变量和方法
class 子类名 extends 超类名
{
……
}
索迪教育
Java 的单一继承性
在 Java 中,一个超类可以有多个子类
一个子类只能有一个超类
子类可访问超类的成员变量和方法( 不是超类的所有变量和方法,由访问修饰符决定 )
超类却不能访问子类新增的变量和方法索迪教育
super关键字
super关键字用来解决如何直接访问或初始化从父类继承来的属性。
super有两种通用形式:调用父类的构造函数、用来访问被子类的成员覆盖的父类成员。
它用在对象的构造函数中,将构造细节通过继承链往上传递。
super()必须是在子类构造函数中的第一个执行语句。
索迪教育
Instanceof关键字
Instanceof为对象引用运算符,在运算符左侧的对象是右侧类的实例时,它将返回 true.
使用此运算符可以确定对象是否属于一个特定的类索迪教育类型转换
基本类型转换
复杂类型转换
子类对超类的实例化
子类可以实例化超类为什么可以?
反过来行吗?
有什么用?
索迪教育方法的覆盖
方法覆盖是 Java实现多态性机制的另一种方式。
在类层次结构中,如果子类中的一个方法与父类中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖。
当一个覆盖方法通过父类引用被调用,Java根据当前被引用对象的类型来决定执行哪个版本的方法。
可以通过 super关键字调用直属父类中被覆盖的方法版本。
静态方法不能被覆盖为非静态方法索迪教育访问修饰符
public protected 缺省 private
同一类中成员 Yes Yes Yes Yes
同一文件夹中其他类 Yes Yes Yes
不同文件夹的子类 Yes Yes
不同文件夹中其他类 Yes
索迪教育包的概念
在 Java 中,能被复用的代码被组织到一起,称为
“包”。
包是类、接口或其他包的集合。
包实际上是一种把类组织到一起的结构。
接口包类其他的包索迪教育包的用途
包允许您将包含类代码的文件组织起来,易于查找和使用适当的类。
包不止是包含类和接口,还能够包含其他包。形成层次的包空间。
它有助于避免命名冲突。当您使用很多类时,确保类和方法名称的唯一性是非常困难的。包能够形成层次命名空间,缩小了名称冲突的范围,易于管理名称。
索迪教育
Java 中的包
Java 中的包表现为文件夹,也可被打包成 Jar 文件
Rt.jar 是典型的压缩包
如果采用了包,必须在 ClassPath 中声明,或在编译时声明
javac -d 目的地 源文件名称
javac -d c:\ Test.java
索迪教育
Object 类
Object类是类体系结构的根
Java 系统中的每个类都是 Object 类直接或间接的子类
Object 类包括在 java.lang 包中
此类定义了所有对象都具备的基本状态和行为
可以用类型为 Object的变量来引用任意类型的对象索迪教育
equals()
用于比较两个对象是否相等,相等返回 true
Object 类中提供的 equals 方法使用恒等函数来确定对象是否相等
Object类中实现的 equals方法只能用来判断两个不同的对象是否指向同一个内存区域
子类一般通过覆盖 Object的 equals方法实现有意义的测试,可以实现:若同一类型的两个不同对象包含相同的信息即返回 true
Integer one = new Integer(1);
Integer anotherOne = new Integer(1);
if (one.equals(anotherOne))
System.out.println("对象相等 ");
索迪教育
toString()
toString 用于返回对象的字符串表示。
建议所有子类都覆盖此方法。
使用,+”运算符将对象同一个字符串连接,Java编译器会自动调用 toString方法,获取对象的字符串表现形式。
Derived d = new Derived();
System.out.println("Derived 的 toString()," + d);
自动调用 d.toString
方法,获取对象的字符串表示形式索迪教育
String 类方法
charAt(),返回字符串中某个特定位置的字符
indexOf(),返回字符串中某个特定字符或子字符串首次出现的索引
toUpperCase(),将字符串内的所有字符从小写改为大写
toLowerCase(),将字符串内的所有字符从大写改为小写
substring(),返回子串索迪教育字符串
创建一个 String 类的实例:
String strName1 = "Humpty dumpty"; //字符串字面量
String strName2 = new String("Egg");
两个或多个字符串可以用,+”运算符合并起来。例如:
strName3 = strName1+ " is the name of an " + strName2;
字符串的长度可以通过 String 类中的函数计算。例如:
int numLength = strName2.length();
也可将数字添加到字符串类型中。例如:
String strVar = "Mark" + 1;
索迪教育字符串池
Java 程序可包含许多字符串字面量
"字符串池 "存放在程序中创建的所有字符串字面量
任何时候创建字符串字面量,系统都会搜索字符串池,
查看是否存在该字符串字面量。
Sunday
Monday
Hello
Aptech
World
1
2
3
4
N
String day= "Monday";
String weekday = "Monday"; 字符串池索迪教育本章小结
掌握类的创建
掌握方法重载
掌握构造函数和初始化对象
继承
掌握方法覆盖
掌握访问修饰符
掌握包的概念
Object类
String类