java中特殊关键字

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Object oriented advanced
Java特殊关键学习及 面向对象原理进阶
目标
• 掌握类的静态成员:static
• 掌握继承的概念和用法:extends • 掌握抽象类的定义和用法:abstract • 掌握final关键字用法 • 掌握接口的定义和用法:interface, implements
有继承就有进化! 而final关键字代 表进化终止!
19
final 方法
• 在方法声明中使用 final 关键字向编译器表明子类 不能覆盖此方法。
• 在声明类中,一个 final 方法只被实现一次。
• 如果一个类为 final 类,那么它的所有方法都为隐 式的 final 方法。
class TestFinal { final void f() {} } class Further extends TestFinal { final void f(){} final方法不能 } 被覆盖
class B { static void test() { } } class C extends B{ void test() {}//出错 }
5
静态块
• 如果需要通过计算来初始化静态变量,可以声明 一个静态块。
• 静态块仅在该类被加载时执行一次。
• 只能初始化类的静态数据成员。
class A { static int x;//静态成员 int y; //非静态成员 static { x=1; y=1; System.out.println("static block: " + x); } }
9
继承示例
class Employee { String name; //姓名 char sex; //性别 Employee(String n, char s){ name = n; sex = s; } class InheDemo { public String getName() { return name; } public static void main(String args[]) { public char getSex(){ return sex;}} Worker w = new Worker("M.John",'M','B',true); System.out.println("工人信息"); class Worker extends Employee { System.out.println("姓名 : "+w.getName()); char category;//类别 System.out.println("性别 : "+w.getSex()); boolean dressAllowance; //是否提供服装津贴 System.out.println("类别 : "+w.getCategory()); Worker(String n,char s,char c,boolean d){ if(w.getAll()) super(n,s); System.out.println("提供服装津贴"); category = c; dressAllowance = d; else } System.out.println(“未提供服装津贴”); public char getCategory(){return category;} } public boolean getAll(){ return dressAllowance; } } }
6
继承
继承是面向对象编程技术的一块基石,它允许创建分等
• 被继承的类称为父类 • 继承父类的类称为子类
级层次的类。运用继承,可以创建一个通用类定义一系列 一般特性。该类可以被更具体的类继承。
• 执行继承时,子类将获得父类的属性,并具有自身特有的 属性。
工人类,继承了父 类的姓名和性别属 性外还包含类别和 是否有服装津贴属性 Worker类: category dressAllowance Emoloyee类: name sex 职员类,具 有姓名和性 别两个属性
4
静态方法
• 与静态方法相关的几个要点: –类的静态方法只能访问其他的静态成员
–静态方法没有this
–静态方法不能被覆盖(重写)为非静态方法
class A{ static int i = 10; int j; static void setValue(int x) { j=x;//出错 System.out.println(" "+ i); } } 不能访问非静态变量j, 可以访问静态变量i
• 多态示例
• 了解包的使用:package
2
类的静态成员
用static修饰符修饰, 可以是变量、方法或代 码块
• 类中的静态变量、静态方法或静态代码块属于 类,而不属于某个特定的对象。
• 类的静态成员可以与类的名称一起使用,而无 需创建类的对象。 • 静态变量或方法也称为类的变量或方法。
3
静态变量
8
supΒιβλιοθήκη Baidur关键字 • super关键字用来解决如何直接访问或初始化 从父类继承来的属性。
• super有两种通用形式:
调用父类的构造函数, 将构造细节通过继承链往上传 递。注意: super()(或其重载的构造函数)必须是在子 类构造函数中的第一个执行语句。 访问被子类成员覆盖(重写)的父类成员(成员变量和成 员方法)。
主任类,还包含 级别和是否配备 交通工具属性
Officer类: empClass vehicle
7
extends关键字 • extends关键字用于继承类。 • 声明一个继承父类的类的通常形式如下:
class subclass-name extends superclass-name { //类体 } 注意 ò 没有extends,默认父类为Object ò 只能有一个父类,即单继承 ò 子类继承父类的public和protected成员
13
Object 类 • Object类是类体系结构的根 • Java 系统中的每个类都是 Object 类直接或间 接的子类 • Object 类包括在 java.lang 包中
• 此类定义了所有对象都具备的基本状态和行为
• 可以用类型为Object的变量来引用任意类型的 对象 • 所以任何对象使用instanceof Object返回的结 果都为真!
14
类型转换 • 执行自动类型转换需要两个条件: byte->short->int->long->float->double – 接受转换的两种类型是兼容的
– 目的类型数的范围比源类型的大
• 强制类型转换语句的通用格式如下: (目标类型)value
UndergraduateStudent s1 = new UndergraduateStudent(); Graduate s2=new Graduate(); Student x; 注意:从父类到子类 的转换,建议在转换 x=s1; 前判断父类是否指向 Graduate s3=new Graduate(); 子类的对象 if (x instanceof Graduate) s3= (Graduate)x;
10
方法覆盖(override)
• 方法覆盖是Java实现多态性机制的另一种方式。
• 在类层次结构中,如果子类中的一个方法与父类 中的方法有相同的方法名并具有相同数量和类型 的参数列表,这种情况称为方法覆盖(重写)。 • 当一个覆盖方法通过父类引用被调用,Java根据 当前被引用对象的类型来决定执行哪个版本的方 法。 • 可以通过super关键字调用直属父类中被覆盖的方 法版本。
17
抽象类示例
抽象方法没有 abstract class Employee { 方法主体 int basic = 2000; abstract void salary();//抽象方法 } class Manager extends Employee{ 在子类中提供 实现 void salary() { System.out.println("薪资等于 "+basic*5); } } class Worker extends Employee { 在子类中提供 实现 void salary() { System.out.println("薪资等于 "+basic*2); } }
15
抽象类
abstract 修饰符可 与类和方法一起 使用
• 定义抽象类的目的是提供可由其子类共享的一般 形式。 • 子类可以根据自身需要扩展抽象类。 • 抽象类不能实例化。 • 抽象方法没有函数体。 • 抽象方法必须在子类中给出具体实现。
16
抽象类 • 在以下情况下,某个类将成为抽象类
直接定义为abstract 当一个类的一个或多个方法为抽象方法时。 当该类为一个抽象类的子类,并且没有为所有 抽象方法提供实现细节或方法主体时。 当一个类实现一个接口,并且没有为所有抽象 方法提供实现细节或方法主体时。
18
final 关键字/final类
• final 修饰符可应用于类、方法和变量。 • final在应用于类、方法和变量时意义是不同的, 但本质是一样的:final表示不可改变。 • 声明为final的类不能被继承。 • final 类示例: java.lang.String
final class TestFinal { int i = 7; int j = 1; void f() {} } class Furtherfinal extends TestFinal {} 类不能被继承
声明为static的变量实质 上就是全局变量
• 不管创建了类的多少实例,整个类中静态变量 的副本只有一个。
• 引用静态变量的方法:
- 通过引用类的任一实例 - 通过类的名称(建议)
class A { static int x = 0; A(){x++;} }
A a1 = new A(); A a1 = new A(); A a2 = new A(); 通过类实例访问 A a2 = new A(); a1.x = 100 ; 不是一个好方法 A.x = 100; a2.x = 200; 通过类名访问 A.x = 200; int y = a1.x; int y = A.x;
11
方法覆盖示例
class SuperClass { int a; SuperClass(){ a = 10; } public void printA(){System.out.println("父类中a ="+a);} } class SubClass extends SuperClass { int a; SubClass(int a){ this.a = a; } public void printA(){ System.out.println("子类中a = "+a); } } public class OverrideDemo { public static void main(String args[]) { SuperClass s1 = new SubClass(20); s1.printA(); } 将调用子类的printA方法 }
12
instanceof关键字
instanceof 测试第一个参数的 运行时类型是否为与第二个 参数兼容的赋值。
class Student {} class Graduate extends Student {} class UndergraduateStudent extends Student {} public class st { public static void main(String []args) { UndergraduateStudent s1 = new UndergraduateStudent(); Graduate s2=new Graduate(); x在运行时指向 Student x; s1,所以if语句 x=s1; 条件返回true if (x instanceof UndergraduateStudent) System.out.println(“x 是 UndergraduateStudent 类 的 实 例。”); else System.out.println(“x是Graduate类的实例。”); } }
相关文档
最新文档