版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Object oriented advancedJava特殊关键学习及特殊关键学习及面向对象原理进阶面向对象原理进阶2目标目标 掌握类的静态成员:static 掌握继承的概念和用法:extends 掌握抽象类的定义和用法:abstract 掌握final关键字用法 掌握接口的定义和用法:interface, implements 多态示例 了解包的使用:package3类的静态成员类的静态成员 类中的静态变量静态变量、静态方法静态方法或静态代码块静态代码块属于类,而不属于某个特定的对象。 类的静态成员可以与类的名称一起使用,而无需创建类的对象。 静态变量或方法也称为类的变量或方法。用用stat
2、ic修饰符修饰,修饰符修饰,可以是变量、方法或代可以是变量、方法或代码块码块4静态变量静态变量 不管创建了类的多少实例,整个类中静态变量的副本只有一个。 引用静态变量的方法:- 通过引用类的任一实例通过引用类的任一实例- 通过类的名称(建议)通过类的名称(建议)class A static int x = 0; A()x+;A a1 = new A();A a2 = new A();a1.x = 100 ;a2.x = 200;int y = a1.x; 通过类实例访问通过类实例访问不是一个好方法不是一个好方法A a1 = new A();A a2 = new A();A.x = 100;A.
3、x = 200;int y = A.x; 声明为声明为static的变量实质的变量实质上就是全局变量上就是全局变量通过类名访问通过类名访问5静态方法静态方法 与静态方法相关的几个要点:类的静态方法只能访问其他的静态成员类的静态方法只能访问其他的静态成员静态方法没有静态方法没有this静态方法不能被覆盖静态方法不能被覆盖( (重写重写) )为非静态方法为非静态方法class A static int i = 10; int j; static void setValue(int x) j=x;/出错出错 System.out.println( + i); 不能访问非静态变量不能访问非静态变量j,
4、可以访问静态变量可以访问静态变量iclass B static void test() class C extends B void test() /出错出错 6静态块静态块 如果需要通过计算来初始化静态变量,可以声明一个静态块。 静态块仅在该类被加载时执行一次。 只能初始化类的静态数据成员。 class A static int x;/静态成员静态成员 int y; /非静态非静态成员成员 static x=1;y=1; System.out.println(static block: + x); 7 被继承的类称为父类 继承父类的类称为子类 执行继承时,子类将获得父类的属性,并具有自身特有
5、的属性。 Emoloyee类:类: name sexWorker类:类: category dressAllowanceOfficer类:类: empClass vehicle职员类,具职员类,具有姓名和性有姓名和性别两个属性别两个属性工人类,继承了父工人类,继承了父类的姓名和性别属类的姓名和性别属性外还包含类别和性外还包含类别和是否有服装津贴属性是否有服装津贴属性主任类,还包含主任类,还包含级别和是否配备级别和是否配备交通工具属性交通工具属性继承继承继承继承是面向对象编程技术的一块基石,它允许创建分等级层次的类。运用继承,可以创建一个通用类定义一系列一般特性。该类可以被更具体的类继承。8ex
6、tends关键字关键字 extends关键字用于继承类。 声明一个继承父类的类的通常形式如下: class subclass-name extends superclass-name /类体 没有没有extends,默认父类为,默认父类为Object只能有一个父类,即单继承只能有一个父类,即单继承子类继承父类的子类继承父类的public和和protected成员成员注意注意9super关键字关键字 super关键字用来解决如何直接访问或初始化从父类继承来的属性。 super有两种通用形式: 调用父类的构造函数, 将构造细节通过继承链往上传递。注意注意: super()(或其重载的构造函数)必须
7、是在子类构造函数中的第一个执行语句。 访问被子类成员覆盖(重写)的父类成员(成员变量和成员方法)。10继承示例继承示例class Employee String name; /姓名姓名 char sex; /性别性别 Employee(String n, char s) name = n; sex = s; public String getName() return name; public char getSex() return sex;class Worker extends Employee char category;/类别类别 boolean dressAllowance; /是
8、否提供服装津贴是否提供服装津贴 Worker(String n,char s,char c,boolean d) super(n,s); category = c; dressAllowance = d; public char getCategory()return category; public boolean getAll() return dressAllowance; class InheDemo public static void main(String args) Worker w = new Worker(M.John,M,B,true); System.out.print
9、ln(工人信息工人信息); System.out.println(姓名姓名 : +w.getName(); System.out.println(性别性别 : +w.getSex(); System.out.println(类别类别 : +w.getCategory(); if(w.getAll() System.out.println(提供服装津贴提供服装津贴); else System.out.println(“未提供服装津贴未提供服装津贴”); 11方法覆盖(方法覆盖(override) 方法覆盖是Java实现多态性机制的另一种方式。 在类层次结构中,如果子类中的一个方法与父类中的方法有
10、相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖(重写)方法覆盖(重写)。 当一个覆盖方法通过父类引用被调用,Java根据当前被引用对象的类型来决定执行哪个版本的方法。 可以通过super关键字调用直属父类中被覆盖的方法版本。12方法覆盖示例方法覆盖示例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;
11、 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方法方法13instanceof关键字关键字 class Student class Graduate extends Student class UndergraduateStudent extends Student publi
12、c class st public static void main(String args) UndergraduateStudent s1 = new UndergraduateStudent(); Graduate s2=new Graduate(); Student x; x=s1; if (x instanceof UndergraduateStudent) System.out.println(“x是是UndergraduateStudent类的实类的实例。例。”); else System.out.println(“x是是Graduate类的实例。类的实例。”); instanc
13、eof 测试第一个参数的测试第一个参数的运行时类型是否为与第二个运行时类型是否为与第二个参数兼容的赋值。参数兼容的赋值。x在运行时指向在运行时指向s1,所以,所以if语句语句条件返回条件返回true14Object 类类 Object类是类体系结构的根 Java 系统中的每个类都是 Object 类直接或间接的子类 Object 类包括在 java.lang 包中 此类定义了所有对象都具备的基本状态和行为 可以用类型为Object的变量来引用任意类型的对象 所以任何对象使用instanceof Object返回的结果都为真!15类型转换类型转换 执行自动类型转换需要两个条件: 接受转换的两种类
14、型是兼容的接受转换的两种类型是兼容的 目的类型数的范围比源类型的大目的类型数的范围比源类型的大 强制类型转换语句的通用格式如下: (目标类型)valueUndergraduateStudent s1 = new UndergraduateStudent(); Graduate s2=new Graduate();Student x;x=s1;Graduate s3=new Graduate();if (x instanceof Graduate) s3= (Graduate)x; 注意:从父类到子类注意:从父类到子类的转换,建议在转换的转换,建议在转换前判断父类是否指向前判断父类是否指向子类的
15、对象子类的对象byte-short-int-long-float-double16抽象类抽象类 定义抽象类的目的是提供可由其子类共享的一般形式。 子类可以根据自身需要扩展抽象类。 抽象类不能实例化。 抽象方法没有函数体。 抽象方法必须在子类中给出具体实现。abstract 修饰符可修饰符可与类和方法一起与类和方法一起使用使用17抽象类抽象类 在以下情况下,某个类将成为抽象类直接定义为abstract当一个类的一个或多个方法为抽象方法时。当该类为一个抽象类的子类,并且没有为所有抽象方法提供实现细节或方法主体时。当一个类实现一个接口,并且没有为所有抽象方法提供实现细节或方法主体时。18抽象类示例抽
16、象类示例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); 抽象方法没有抽象方法没有方法主体方法主体在子类中提供在子类中提供实现实现在子类中提供在子类中提供实现实现19f
17、inal 关键字关键字/final类类 final 修饰符可应用于类、方法和变量。 final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。 声明为final的类不能被继承。 final 类示例: java.lang.String final class TestFinal int i = 7; int j = 1; void f() class Further extends TestFinal final类不能被继承类不能被继承有继承就有进化!有继承就有进化!而而finalfinal关键字代关键字代表进化终止!表进化终止!20final 方法方法 在方法声明
18、中使用 final 关键字向编译器表明子类不能覆盖此方法。 在声明类中,一个 final 方法只被实现一次。 如果一个类为 final 类,那么它的所有方法都为隐式的 final 方法。class TestFinal final void f() class Further extends TestFinal final void f() final方法不能方法不能被覆盖被覆盖21final 变量变量 一个变量可以声明为final,这样做的目的是阻止它的内容被修改。 声明final变量后,只能被初始化一次,然后就不能对其值进行修改。 一个final变量实质上是一个常量。 class Final
19、Demo public static void main(String args) final int noChange = 20; noChange = 30; final变量不能被变量不能被修改修改22接口接口 一个接口可以从几个接口继承 一个类可实现几个接口。 Java 程序一次只能继承一个类但可以实现几个接口。 接口不能有任何具体的方法。 接口也可用来定义可由类使用的一组常量, 类型只能是public static final, 即为默认类型。 接口提供“is a”关系。 接口是一套规范和标准,没有接口是一套规范和标准,没有具体的实现细节,只有常量和具体的实现细节,只有常量和公有抽象方
20、法。公有抽象方法。23创建接口创建接口/ / 有方法的接口有方法的接口public interface myinterface public void add(int x, int y);public void volume(int x,int y, int z);/ / 定义程序使用的常量的接口定义程序使用的常量的接口public interface myconstants public static final double price = 1450.00; public static final int counter = 5; 定义一个接口:定义一个接口:24创建接口创建接口 用关键字
21、 implements 实现接口,例如:class demo implements myinterface 如果有一个以上接口被实现,则用逗号隔开接口名称,如下所示: class demo implements Mycalc, Mycount25接口使用示例接口使用示例interface A double g=9.8; void show( );class InterfaceTest public static void main(String args ) B b=new B( ); b.show( ); class B implements A public void show( ) Sy
22、stem.out.println(“g=“+g); 26多态多态在面向对象程序设计中,多态性原则是一个基本的设计原则所谓多态就是针对不同的对象发同样的消息,这些对象的响应是不一样的。多态在生物界表现出来的就是生物多样性。 多态示例程序演示AnimalHumanDogFishCatSwimmer27包包 package包可以是类、接口和子包的集合在Java中,包主要有以下用途: 集合相关的类和接口集合相关的类和接口 有助于避免命名冲突有助于避免命名冲突 访问控制访问控制: : 保护类、数据和方法保护类、数据和方法 package语句特性:放在第一句放在第一句每个源文件最多只能一个每个源文件最多只能一个包名应小写包名应小写创建包的组织或团体的反向域名命名创建包的组织或团体的反向域名命名以以java.java.* *和和javax.javax.* *开头的包名被保留开头的包名被保留28使用包使用包 定义包package mypackage; 访问 Java 包中的类成员 mypackage.My_Class 导入包import package_name.*; import packa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业管理-PNC(规划-导航-控制)管理制度
- 龙岩市五县重点达标名校2026年初三中考总复习单元同步滚动测试卷物理试题含解析
- 陕西商南县2025-2026学年初三1月阶段测试数学试题试卷含解析
- 2026年云南省施甸县初三第一次质量预测数学试题含解析
- 四川省成都市高新南区重点名校2026届初三数学试题二模试卷含解析
- 2026年四川省简阳市简城区初三下学期第一次联考物理试题试卷含解析
- 安徽界首地区市级名校2025-2026学年初三下学期8月开学数学试题含解析
- 广西南宁市青秀区第二中学2026届初三4月调研测试(二模)物理试题含解析
- 高中语文《登岳阳楼》课件+统编版高一语文必修下册
- 骨折患者沟通技巧与心理护理
- 沁和能源集团有限公司永红煤矿资源开发利用和矿山环境保护与土地复垦方案
- 高考18个文言虚词用法详解
- 超高性能混凝土进展及工程应用
- 旋毛虫法语课件
- 五原县供热工程专项规划(2014-2030年) 说明书
- 上海市2023年基准地价更新成果
- 拔牙术拔牙并发症
- 选派援疆医疗卫生人才协议书
- XB/T 405-2016铈铁合金
- GB/T 9966.16-2021天然石材试验方法第16部分:线性热膨胀系数的测定
- GB/T 3733.2-1983卡套式端直通接头体
评论
0/150
提交评论