十一、super关键字1、super 代表的父类空间的引用2、super关键字的作用: i. 可以指定调用父类的成员属性 ii. 可以指定调用父类的成员方法 iii. super 关键字可以指定的调用父类的构造方法 3、super 关键字调用父类带参的构造方法注意的细节:i. super 调用父类的构造方法时,必须是放在第一个语句 ii. this 与 super 关键字调用构造的时候都必须放在第一个语句 所以不能同时出现在一个构造函数中 十二、方法重写(override)1、在子父类中存在着同名的函数i. 方法重写前提:必须存在继承关系 2、方法重写要注意的细节:ii. 函数名必须一致 iii. 子类重写方法的权限修饰符必须 >= 父类的权限修饰符 iv. 子类的返回值类型必须要 <= 父类的返回值类型 v. 子类抛出的异常类型不能大于父类抛出的异常类型 十三、instanceof 关键字1、作用:判断对象是否属于某种类别 2、instanceof 关键字使用的前提:对象必须要与判断的类型存在着关系 3、instanceof 关键字用于多态,是一个比较运算符十四、final 关键字:最终1、final 关键字使用注意的细节:i. final 关键字使用注意的细节: 1. final 关键字修饰的基本类型变量时,不能第二次赋值 final 修饰的成员变量是一个常量 常量一般的修饰符为:public static final 2. final 关键字修饰引用类型的变量时,不能重新指向新的对象 3. final 修饰的方法为最终的方法,final 修饰的方法不能被重写 4. final 修饰的类为最终类,final 修饰的类不能被继承 5. final关键字主要用于修饰类、类成员、方法、以及方法的形参 十五、abstract 关键字1、abstract 关键字不能与以下关键字同时使用:i. abstract 不能与 static、private、final 共同使用 十六、抽象类1、在描述一类事物的时候,发现该事物确实存在着某种行为,但是这种行为在目前情况是不具体的那么可以抽取该种行为的声明,但是不去实现这种行为,那么这时候可以使用抽象类对这种事物进行描述 2、抽象类与抽象方法都是使用abstract修饰3、抽象类要注意的细节:i. 抽象方法必须定义在抽象类和接口中 ii. 非抽象类继承抽象类的时候,必须要实现抽象类中的所有抽象方法 iii. 抽象类可以定义非抽象方法 iv. 抽象类可以没有抽象方法 v. 抽象类不可以创建对象 vi. 抽象类有构造方法 抽象类存在构造方法的意义在于被子类调用初始化父类的成员属性 vii. 抽象类继承抽象类的时候,那么可以实现抽象类的抽象方法,也可以不实现抽象类的抽象方法 4、如果一个类中存在抽象方法,那么该类必须声明为抽象类:i. 修饰符 abstract class 类名 { } 5、子类继承抽象类有两种情况:i. 子类要么重写父类中所有的抽象方法 ii. 子类要么也声明为抽象类 十七、接口1、使用interface 关键字定义接口 2、格式:interface 接口名 { public static final 属性; public abstract 返回值类型 函数名 ( ); } 3、接口名的命名规范与类一致4、接口与类之间的关系:实现关系i. 需要使用关键字 implements 去实现接口的使用 ii. 非抽象类实现接口时,必须要实现接口中所有方法 iii. 一个类可以实现多个接口 5、接口与接口之间的关系:继承关系i. 接口可以多继承接口 6、接口要注意的细节:i. 接口中的成员属性默认的修饰符为:public static final 都是常量 ii. 接口中的方法默认的修饰符为:public abstract iii. 接口不能创建对象 iv. 接口时没有构造方法的 因为接口中的成员属性全部都是常量,方法全部都是抽象的方法 v. 非抽象类实现接口的时候,必须要把接口中的所有方法全部实现 vi. 类实现接口: 要么重写该接口中所有的方法,要么声明为抽象类 7、接口的作用:i. 程序解耦 ii. 作为一个规范(约束) iii. 拓展了功能 8、接口可以理解为一个特殊的类,不同的是创建需要interface 关键字,接口里面都是由全局常量和公共的抽象方法组成的 十八、多态1、一个对象具有多种形态(父类的引用类型变量指向了子类的对象)2、多态的前提:必须要存在继承或者实现关系 3、多态情况下的访问:i. 多态情况下,如果子父类存在着同名的(静态与非静态)成员属性时,那么访问的是父类的成员属性 ii. 多态情况下,如果子父类存在着同名的非静态成员函数时,那么会访问子类的成员函数 iii. 多态情况下,如果子父类存在着同名的静态函数,那么则会访问父类的成员函数 总结:多态情况下,如果子父类存在着同名的成员时,那么只有非静态的成员方法是访问子类的,其它都是访问父类的 4、多态的弊端:不能调用子类特用的成员,即只能使用父类引用指向父类成员 (为什么不能调用子类特有的成员:编译看左边,运行不一定看右边) java编译时: java编译器在编译的时候,会检查引用变量所属的类是否具有指定的成员,如果没有那么编译报错 java运行时: java虚拟机在运行的时候,多态情况下,如果子父类存在着同名的成员时,那么只有非静态的成员方法是访问子类的,其它都是访问父类的 5、多态的应用:i. 作为形参类型的时候,可以接收更多类型的对象 ii. 作为方法返回值类型的时候,可以返回更多类型的对象 6、多态的好处:提高了程序的拓展性 7、在多态中如果需要调用子类特有的方法iii. 类型转换: 1. 基本类型的数据转换: 小 ——> 大 自动转换 大 ——> 小 强制转换 (数据类型) 2. 引用数据类型的数据转换: 小 ——> 大 自动类型转换 Animal a = new Mouse( ); 大 ——> 小 强制类型转换 Mouse m = (Mouse) a ; iv. 类型强制转换常见的异常: java.lang.ClassCastException 类型转换异常 十九、内部类1、在类中定义的类则称为内部类i. 内部类的class文件: 外部类.内部类 2、内部类的好处ii. 内部类可以被成员修饰符所修饰 iii. 可以直接访问外部类的成员 3、什么时候使用内部类我们在描述一类事物的时候,发现该事物里面具有另外的一个具体的事物,这个具体的事物在使用该事物的成员,这时候可以使用内部类进行描述 比如: 人 ——> 心脏 4、成员内部类iv. 在一个类中的成员位置定义类,则该类就称为成员内部类 v. 成员内部类的访问方式: 1. 在外部类提供一个公共的方法创建内部类的对象进行访问 2. 在其它类直接创建内部类的对象的格式: 外部类.内部类 变量名 = new 外部类( ).new 内部类( ); 3. 如果内部类是静态内部类,那么创建内部类对象的格式: 外部类.内部类 变量名 = new 外部类.内部类( ); vi. 成员内部类要注意的细节: 1. 如果外部类与内部类存在同名成员时,默认情况下是访问内部类的成员,可以通过 外部类名.this.成员名 指定访问外部的成员 2. 私有的成员内部类只能通过外部类提供公共方法创建内部类的对象进行访问 3. 如果内部类存在着静态的成员,那么必须使用static修饰内部类 5、局部内部类vii. 在一个函数中定义类 viii. 局部内部类 1. 局部内部类,可以直接访问外部类的成员 2. 局部内部类如果访问所在方法局部变量时,那么该局部变量必须使用final进行修饰 6、匿名内部类 ix. 没有类名的内部类 x. 匿名内部类的前提:必须存在继承或者实现的关系 xi. 匿名内部类的好处:简化书写 xii. 匿名内部类就是一个子类匿名对象,是一个带有内容的对象 xiii. 什么时候使用匿名内部类: 当函数的参数是一个接口类型的引用,而且该接口中的方法不超过3个,这时候可以给这个函数传递一个匿名内部类世纪参数进入,简化书写
|