一、继承1、继承的格式及特点: 1).格式:子类使用关键字:extends2).Java中继承的特点: 1).父类中“私有成员”,“构造方法”不能被继承; 2).Java中只能“单继承”,子类只能继承一个父类;
1. 继承后的特点_成员变量和成员方法_方法重写:

总体特点:访问时先在子类中找,找到,就执行;找不到,再去父类中找;    1).当子类定义了跟父类一模一样的方法时,这种情况叫:重写    2).有时候我们要特意的去重写父类中的方法,通常是因为:子类需要保留父类的功能,但希望改写父类的行为,这时子类就要重写父类的方法。    3).“特意的去重写”就要知道重写的语法格式:       1).子类方法的方法名、形参列表必须跟父类方法一模一样。       2).子类方法的访问权限修饰符,可以跟父类相同,或者比父类更宽:           Java中的访问修饰符四种:从宽到窄           public(公有)、protected(受保护)、什么都不写(默认)、private(私有)方法重写要注意的事项:    1.方法重写时, 方法名与形参列表必须一致。    2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。    3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。    4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。           Exception(最坏)           RuntimeException(小坏)    4).注意:       1).“私有方法”不能被继承,所以也不能被重写;为了防止“重写失败”,Java为我们提供了一种注解“@Override”,作用:给“编译器”看的,告诉编译器:我下面的方法是重写父类的方法的,请按照重写的语法规则验证,如果不符合重写规则,编译器则编译失败。
1. 继承后的特点_构造方法


1. .当构造子类对象前,JVM总会先构造一个父类对象,并且将这个父类对象存储在子类对象空间内部。
2. .默认情况下,JVM会去调用父类的“默认无参”构造方法创建父类对象。因为子类的任何构造方法的第一行都隐式的有一句代码:调用父类中“无参”的构造方法。

       super();3).如果父类没有无参构造方法,而定义了有参的构造方法,这时,子类的构造方法中,必须显示的使用super(实参)调用父类中有参的构造方法。注意:当子类继承父类时,一定要观察父类的“构造方法情况”,通常子类会提供跟父类中一样形式,一样数量的构造方法4、this和super关键字:   1).this和super的区别:   super关键字代表了父类空间的引用。super关键字的 作用:   1. 子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。Super默认是从父类开始执行,this默认是从本类开始执行,寻找其所要寻找的成员。   2. 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。super关键字调用父类构造方法要注意的事项:   1. 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法上面加上super()语句。   2. super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。因为子类可能会用到父类的属性,所以必须先初始化父类。   3. super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。super关键字与this关键字的区别:   1. 代表的事物不一致。         1. super关键字代表的是父类空间的引用。            2. this关键字代表的是所属函数的调用者对象。   2. 使用前提不一致。         1. super关键字必须要有继承关系才能使用。         2. this关键字不需要存在继承关系也可使用。   3. 调用构造函数的区别:         1. super关键字是调用父类的构造函数。         2. this关键字是调用本类的构造函数。二、抽象类及抽象方法定义格式及成员:   1).抽象类的定义格式:使用:abstract class       1).格式:     public abstract class Person{     } 2).抽象类中的成员:     1).普通成员变量;(私有,存储数据)     2).构造方法;(为成员变量赋值)     3).普通成员方法:(被子类继承的)     4).抽象方法:(强制子类继承,并重写)   2).抽象方法的定义格式:使用:abstract       abstract class Person{           public abstract void work();//强制子类继承并重写;       }3)注意事项:    1).“抽象类”中可以不定义抽象方法;    2).如果包含“抽象方法”,那么这个类必须是“抽象类”;    3).抽象类不能被实例化(创建对象)。它就是纯粹的做父类用的。    4).抽象类不能被实例化,但可以包含构造方法,构造方法的作用:可以使子类使用super(...)语句调用这个构造方法,并为成员属性赋值。    5).抽象方法不能被修饰为:private,因为private的方法不能被继承,也就不能被重写;而抽象方法就是让子类重写的,冲突;此外abstract也不能与static或final共同修饰一个方法。    6).子类继承抽象类后,必须重写抽象类中所有的抽象方法,否则子类也必须是一个抽象类;    7).当定义父类时,到底是普通类还是抽象类?       1).如果包含抽象方法,父类必须定义为“抽象类”;       2).如果没有抽象方法,父类定义为普通类或抽象类都可以;8).抽象类可以继承普通类与抽象类;
1. 接口

1).什么是“接口”:接口是一个比抽象类更抽象的一种类;2).接口的作用: 1).弥补Java单继承的弊端,通过接口可以实现子类功能的扩展;1、接口的定义格式及成员特点: 1).定义接口: public interface 接口名{//注意:没有class关键字 } 2).接口会被编译成.class文件; 3).接口同抽象类一样,不能被实例化;就是做“父级类”使用的; 4).接口中成员:六种 1).公有、静态、常量;–可以被继承,但不能被改写;可以通过“接口名”,“子类类名”, “子类对象名”调用。 public static final int num = 10; 2).公有、抽象方法:–被子类继承并强制重写; public abstract void show(); 3).公有、默认(default)方法(不是抽象的,有方法体)–可以被继承,子类也可以重写; public default void show2(){ … } 4).公有、静态方法(有方法体)–不能被继承,只属于接口,只能通过“接口名”调用 public static void show3(){ } 5).私有、静态(有方法体)–不能被继承,只能在此接口内部使用。被内部的default方法,公有、静态方法调用 private static void show4(){ } 6).私有方法(有方法体)–不能被继承,只能在此接口内部使用。被内部的default方法调用。 private void show5(){2、子类实现接口: 1).子类实现接口,使用关键字:implements2).子类实现接口后,必须重写接口中所有的“抽象方法”,否则子类必须是“抽象类”。 其它可以被继承的成员会被子类继承。3、接口的多实现: 1).子类可以在继承一个类的同时,实现一个或多个接口; 子类也可以不继承,而直接实现一个或多个接口:子类:子类可以在继承一个类的同时,实现一个或多个接口 class Zi_1 extends Fu implements IA,IB{//必须先继承,后实现
//必须实现父类以及所有父接口中的所有的抽象方法 }子类:子类也可以不继承,而直接实现一个或多个接口: class Zi_2 implements IA,IB{ //必须实现父接口中的所有的抽象方法 }注意:
1. 接口中,有多个抽象方法时,实现类必须重写所有抽象方法。如果实现多个接口的抽象方法有重名的,只需要重写一次。
2. 接口中,有多个默认方法时,实现类都可继承使用。如果实现多个接口的默认方法有重名的,必须重写一次。
3. 当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类就近选择执行父类的成员方法。
4. 公有、静态、常量冲突:如果实现多个接口的常量有重名的,则常量不能访问,访问出异常。

1. 接口和接口的多继承

1).类(抽象类)和类(抽象类)之间:继承关系 2).类(抽象类)和接口之间:实现关系 3).接口和接口之间:继承关系,而且可以多继承注意: 1).接口不能继承类; 2).接口不能实现接口; 4).接口和接口的多继承的冲突:1)、一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键字,子接口继承父接口的方法。如果父接口中的默认方法有重名的,那么子接口需要重写一次,若有重名的抽象方法,只需重写一个。注意:子接口重写默认方法时,default关键字可以保留。子类重写默认方法时,default关键字不可以保留。四、多态 1).什么是“多态”:指一类事物的多种形态;2).Java中“多态”的代码格式: 父级类型 变量名 = new 子级类型(); 父级类型:可以是类、抽象类、接口 子级类型:必须是能new的子类对象
1. 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。
2. 多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展。父类类型作为方法形参,利于程序扩展,父类类型作为方法的返回值,利于程序扩展。

多态时访问的总体规则:多态时,大部分情况下访问的都是父类的内容,只有当子类重写父类的非静态方法时,调用的是子类的。多态向下转型的注意事项: 1).向下转型时,转换的子类类型必须是之前指向的那个子类类型,不能其它子类类型; 强转有风险,转换需谨慎: Java提供了一个运算符:instanceof,可以判断一个变量是否是某种类类型; 多态要注意 的细节: 1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。 2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。 3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。 4. 多态情况下,不能访问子类特有的成员。总结:多态情况下,子父类存在同名的成员时,访问的都是父类的成员,除了在同名非静态函数时才是访问子类的。

10-02 20:35