java继承与多态_Java继承与多态

Java概述数据类型和运算符程序流程控制类与对象继承与多态数组与字符串异常处理Java常用类图形用户界面GUI多线程输入输出流数据库编程Java语言特点简单易学面向对象安全性跨平台(体系结构中立)多线程动态性健壮性Java程序开发步骤1.创建、编辑Java源文件2.编译Java源文件3.运行Java字节码文件Java虚拟机规范规定Java虚拟机由6个部分组成虚拟机能够认识的字节代码以及能实现的功能Java程序的跨平台性的原因1.Java语言是完全统一的语言版本2.字节代码是与平台无关的3.Java虚拟机隐藏了不同平台的差异Java的三个体系JavaSE (标准版)JavaEE (企业版)JavaME (微型版)关键字和标识符标识符:由字母,数字,下划线和美元符号组成常量与变量关键字,保留字数据类型基本类型引用数据类型布尔类型数值类型强制数据转换常量整型常量浮点型常量字符常量变量变量使用前必须首先声明运算符赋值运算符 =算术运算符 + - * /(整数相除的结果为整数) %关系运算符 > >= < < != 关系条件成立用true表示位运算符& 位与清零去一个数中指定的位| 位或常用来对一个数据的某些位置1^ 位的异或使特定位翻转与0相异或,保留原值~ 位的非使二进制按位取反<< 左移位运算符即乘2>> 有符号右移运算符采用符号扩展机制,值为正,在高位补0,值为负,在高位补1>>> 无符号右移运算符采用零扩展,无论值为正还是负,都在高位补0逻辑运算符! NOT&& AND|| OR其他运算符复合运算符如 += 提高效率条件运算符表达式1?表达式2:表达式3表达式1 2 3 类型可以不同,此时条件表达式的值为它们中精度较高的类型逗号运算符用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。在Java中只能用在for循环语句中字符串运算符+ 不仅起到连接不同字符串的作用,还有一种隐式的转型功能数据类型转换自动类型转换强制类型转换byte - short(char)- int - long - float - double必须编写代码,很可能会存在精度的损失byte short char三者并不会互相转换,三者在计算中首先转换为int型分支结构if语句if-else语句switch语句循环结构while语句do-while语句for语句先判断后执行 while括号中的表达式必须是布尔型 循环体可以为空体先执行一次再判断 先执行循环体在计算布尔表达式语句嵌套while嵌套do-while嵌套for循环嵌套相互嵌套程序跳转break语句跳出该区块,继续运行后面的语句 用于循环 表示跳出break所在的循环continuereturn只能用于循环结构不带标号时提前结束本次循环,进入下一轮循环的运行 直接跳到判断语句中带标号的continue[标号]多用于多重循环结构,一般需要放在整个循环的外面,一旦内循环执行了带标号的continue语句,程序直接跳转到标号处的外层循环。多用在方法中,有两个作用返回方法指定类型的值结束方法的执行常用的程序设计方法枚举法(穷举法)递推法顺推逆推递归法基本概念实体映射对象对象抽象出类类实例化对象实体抽象出类型概念类型概念映射类面向对象的特性封装继承多态单继承多继承任何一个派生类都只有一个直接父类 树状结构 Java仅支持单继承一个派生类可以有一个以上的直接父类 网状结构重载覆盖静态多态 同一个类中定义多个名称相同的方法动态多态 子类中定义与父类中同名的方法类类的修饰符只有3个:public private protectedfinal 和 abstract 不能同时出现类的父类写在extends 后,该类实现的接口写在implements 后类与对象对象对象的声明 格式: 类名 对象变量名声明部位对象分配空间,只为引用型变量分配一个引用空间,用来存放引用值(该类型对象的地址)创建对象(给实例分配内存空间的过程) 格式: new类名([实参表])Java中可以通过.实现对变量的访问和方法的调用对象的清除指当不存在某一对象的引用时,就释放该对象所占用的内存空间引用成员变量的格式: 对象变量名.成员变量名引用成员方法的格式: 对象变量名.成员方法名([参数表])Java中的对象清除由运行系统自动完成,成为垃圾收集成员变量成员变量的声明格式: [可访问修饰符][abstract|final][其他] 类型变量名[=初始化表达式]...可访问修饰符定义被访问的范围:public,protected,private和默认(缺省)被static修饰的成员变量称为类变量(或静态变量),没有被static修饰成员变量称为实例变量。类变量属于类,实例变量属于对象(或实例)被final修饰的变量通常称为有名常量,与普通变量不同的是,有名常量必须赋值且只能赋值一次,之后有名常量的值不能再被修改其他是指transient 和 volatiletransient:定义一个暂时变量,指示Java虚拟机该变量不是对象永久状态的一部分,在对象序列化时不需要考虑volatile:定义一个共享变量,告诉Java编译器该变量的值可能会被当前线程以外的其他线程所改变实例变量和类变量实例变量:类体内方法体外定义,且无static修饰符类变量:类体内方法体外定义,变量名前需要static修饰符局部变量:方法体内或块内定义的,变量名前只能用final修饰或没有修饰符访问类变量的两种方式通过类名访问通过类的任何实例变量访问类变量位于方法区,类变量属于类,不属于任何一个类的具体对象实例变量位于堆区,实例变量的生命周期与实例的生命周期相同局部变量属于栈区变量的初始化变量的初始化指自变量定义以后,首次给它赋初始值的过程初始化为默认值的规则整数型(byte int long short)的基本类型变量的默认值为0单精度浮点型(float)的基本类型变量的默认值为0.0f双精度浮点型(double)的基本类型变量的默认值为0.0d字符型(char)的基本类型变量的默认值为“\u0000”,即空字符布尔型的基本类型变量的默认值为false数组引用类型的变量的默认值为null显式初始化定义: 一个变量在定义时包含初始化表达式,那么系统会随后计算该表达式并给变量重新赋值局部变量必须先经过显式初始化,才能够使用。若没有被显式初始化,编译器将报错报错及解决办法局部变量的错误引用成员变量的错误引用编译时报错解决方法:局部变量在引用前赋值编译时报错变量赋值放在方法中局部变量、实例变量和类变量局部变量实例变量类变量在方法每次调用时重新初始化,使用前一定要显式初始化或赋值实例变量有默认值,可以通过构造方法进行初始化或者动态初始化块进行初始化动态初始化块格式{....} 大括号前无修饰符类变量的初始化发生在类装入时。类变量有默认值,可以通过静态初始化块进行初始化静态初始化块格式:static{...}final修饰符说明常量时,应注意需要说明常量的数据类型final常用于修饰类变量若一个final变量在定义时没有包含初始化表达式,那么应在适当的时候为其显式赋值final实例变量:必须在某个实例初始化块或者在每个构造方法内显式赋值final类变量:必须在某个静态初始化块内显式赋值final局部变量:必须在引用之前显式赋值变量的作用域和生存期变量的生存期lifetime指变量被分配内存的时间期限类变量的生存期与类相同实例变量的生存期与实例(对象)相同局部变量当其所在方法被调用时,为该局部变量分配内存空间,方法结束调用时,收回该局部变量所占内存空间成员方法成员方法的声明及调用格式:[可访问修饰符][abstract][static][final][native][synchronize] 返回类型方法名(形参表)[throw 异常类名表]{...//方法体}格式的含义修饰符返回类型形参表,可有可无方法体,并列形式可访问修饰符与成员变量可访问修饰符含义相同用abstract修饰方法称为抽象方法,只提供方法名、形参表和返回类型,没有方法体的方法有static修饰的称为类方法,否则称为实例方法有final修饰的方法称为最终方法最终方法不能在子类中覆盖最终方法不能被abstract修饰private方法和final类中的所有方法都隐含final性质用native修饰的方法称为本地方法用synchronize修饰的方法称为同步方法,用于保证多线程之间的同步性返回值类型返回值非void,则方法体中必须包含带表达式的return语句语句返回的数据类型与方法的返回类型相容基本类型引用类型void指明该方法没有返回值对基本类型,实际返回类型要与制定返回类型相同,或者能够赋值转换成制定返回类型对引用类型(类),实际返回类型要与指定返回类型相同(同一个类),或者是指定返回类型的一个子类有形参:各参数用逗号隔开 方法形参被看作时局部变量方法调用时,实参要与形参数目相同,类型相容实参与形参的传递规则基本类型,按值传递;引用类型,按引用传递抽象方法和本地方法,方法体为分号其他情况,方法体是块语句实例方法和类方法调用方式不同访问的成员不同实例方法必须通过实例调用类方法一般通过类名调用,也可以通过实例调用实例方法可以直接访问该类的实例变量与实例方法,也可以访问类变量与类方法类方法只能访问该类的类变量和类方法,不能直接访问实例变量和实例方法构造方法具体功能为实例分配内存空间初始化实例变量返回对该实例的一个引用方法重载含义:一个类中出现多个方法名相同但形参不同的情况形参不同参数类型不同参数顺序不同参数个数不同数据传递方式参数传递方法返回实例变量类变量作为对象中诸方法的共享变量来传送数据Java参数传递的本质是值传递参数为基本类型:按值传递 特点为数据单向传递参数为引用类型:按引用值传递 特点是 引用值单向传递,数据双向传递方法调用后被调方法将求出的值返回到调用方法处作为同一类中所有对象诸方法的共享变量来传送数据类的组织方式—包作用包可以划分和组织类,使类和接口按功能、来源分为不同的集合包是类名空间,一个包中的类不能重名,不同包中的类可以重名包提供了包一级的封装与存取权限包的创建package 包名功能:指明源文件中定义的类和接口属于哪个包包的引用若一个类访问来自另一个包(Java.lang包除外)中的类,那么前者必须通过通过语句把这个类引入。否则必须引入这个类的完整类名无名默认包的类不能被其他包中的类引用引用格式import 包名.类名;import 包名.*;访问权限Java中类,包和访问修饰符共同构建了Java的访问控制机制类的访问权限用public修饰缺省修饰该类可以被任何包的代码访问该类可被本包的代码访问类中成员的访问控制私有(private)成员默认(无修饰符成员)成员保护(protected)成员公共(public)成员同一包内及其子类(不同包)中的代码可访问它仅在本类内中的代码可访问它在同一包内中的代码可访问它在所有包内中的代码可访问它继承的实现通过extends实现格式:[修饰符]class 子类名 extends 父类名{成员变量定义构造方法定义 静态或实例初始化块 成员方法定义}Java仅支持单继承,一个final类不能够有子类所有类都是Object类的子类直接引用是直接使用变量名或方法名在一个类中,不能被继承的内容私有成员静态初始化块父类和子类不在同一个包中,父类中没有用被protected,public修饰的成员在父类或超类中用修饰符final或static修饰的方法不能被子类继承变量隐藏和方法覆盖变量隐藏子类的成员变量名与父类的成员变量名同名,使得父类中的成员变量不能被子类直接引用出现变量隐藏时,要在子类中直接引用超类中被隐藏的变量,可以使用包含关键字super的方法访问表达式 super.变量名方法覆盖子类定义的实例方法与直接超类中的某个实例方法具有相同的方法名,返回值和完全一致的参数,使得直接子类中的那个方法不能被子类直接引用一个正确的方法覆盖需要满足的要求覆盖方法与被覆盖方法的返回类型,方法名,参数要完全一致覆盖方法的访问级别不能低于被覆盖方法的访问级别覆盖方法不能比被覆盖方法抛出更多的‘受检查异常’的类型意义在不改变变量名和方法名的基础上(对外统一名字和接口)通过变量隐藏和方法覆盖可以把父类的状态和行为改变成自身的状态和行为,又不失其继承性通过引用类型变量来访问所引用对象的方法变量时,Java采用不同的绑定规则动态绑定静态绑定实例方法与引用变量实际引用的对象的方法绑定成员变量与引用变量所声明的类型的成员变量绑定静态方法与引用变量所声明的类型的方法绑定子类的构造方法有继承时的构造方法关键字null,this和super构造方法的功能在创建类的对象时进行初始化工作在创建对象时,不仅会建立在该类中定义的实例变量,也会建立在该类的所有超类中定义的实例变量(不管是否被继承) 如何初始化?子类的构造方法初始化子类中定义的实例变量,超类的构造方法初始化超类中定义的实例变量子类不能继承父类的构造方法,但其存在一定的关系,并遵守以下原则子类没有定义任何构造方法时在创建子类对象时会调用父类无参构造方法,即执行super()子类定义了构造方法在子类构造方法中没有显式调用父类的构造方法在创建子类对象时会先调用父类无参构造方法,再执行子类自己的构造方法在子类构造方法中利用super关键字显式调用父类的构造方法在创建子类对象时,首先显式调用父类的构造方法,然后执行子类构造方法体其余的部分nullthissuper空对象代表了当前对象的一个引用,引用场合用this代表当前对象本身this.变量名在类的构造方法中,通过this语句调用本类的另一个构造方法this([实参表])super.变量名supr.方法名super([实参表])抽象类和最终类抽象最终类抽象方法抽象类abstract 返回类型 方法名(形参表); 分号代表一个方法体的定义抽象类是abstract修饰的类,不能生成对象的类,其意义在于继承要求抽象类可以没有抽象方法,反抽象方法一定定义在抽象类中抽象类一般含有抽象方法,需要子类继承抽象类还可以含有非抽象的抽象类不能定义为private final和static没有抽象的构造方法final可以修饰非抽象类,非抽象成员方法和变量用final修饰的非抽象类不能被继承,没有子类,被称为最终类用final修饰的非抽象方法不能被子类的方法覆盖,称为最终方法用final修饰的变量或常量只能被赋一次值接口多态定义实现接口中只包含有名常量和没有实现的抽象方法格式:public interface 接口名 [extends 直接付接口名列表]{[public static final ]类型 有名常量名=常量值;[public abstract ]返回值类型 方法名(参数列表)}接口默认有public、abstract属性接口定义的是某一特定功能的一组方法的对外接口和规范把对接口的继承称为接口的实现一个类可以实现一个或多个接口,接口在类定义中的implements子句中列出接口的继承与组合接口通过extends继承其他接口接口怒允许循环继承或继承自己格式:[修饰符] class 类名 [extends 直接超类名] implements直接超接口名列表{...}规则在类定义中,用implements声明该类将要实现哪些接口实现类的方法必须指定为public,否则认为缩小权限范围类中必须具体实现该interface中定义的抽象方法若实现的接口不是抽象类,那么必须实现该interface中定义的全部方法,也可以是空方法体若实现接口的类是抽象类,那么可以不实现该interface中定义的全部方法一个名字,多种方法方法重载实现多态方法覆盖实现多态适配器设计模式(包装模式)实现接口转换内部类(嵌套类)在一个类内部定义的类。把内部类所在的类称为外部类,最外层的类称为顶层类顶层类只能处于public和没有修饰符的访问级别,成员内部类可以处于public,protected,private和无修饰符这四种访问级别分类成员内部类局部内部类匿名内部类一个内部类被声明为一个类的成员内部类应与外部类不重名内部类被定义在一个类的方法中或代码块中定义在方法体或块语句中的内部类,无类名通过扩展某个类或实现某个接口来定义 无构造方法格式:new 超类名或接口名 (参数列表){类定义};匿名内部类是局部

你可能感兴趣的:(java继承与多态)