java中的继承
1、大家在看到继承2个字的时候可能第一想法就是生活中的子女继承父母的财产,生活中的继承特点是钱不用自己挣也可以花。在代码这块2个类之间存在某种联系,建立这种继承关系,继承不能乱继承,能不能继承一定要符合一种规矩这个规矩称之为 is a关系狗 is a 动物 ok狗 is a 人类 error
2、比如说我们载睛碥伉玩的《lol》游戏中,所有的人物都属于英雄应该有一个英雄类,每个英雄又有不同的特征比如有的属性ADC有的属性AP,每个类型下面还有不同的实现英雄类英雄类---------幻腾寂埒--------------| | ADC类 AP类------------------ -------------------| | | | | | 寒冰类 女警类 老鼠类 凤凰类 电耗子类 提莫类继承是让类与类之间产生关系,继承是实现多态的前提!a,继承的语法继承的关键字 extends 定义一个父类class 父类{}定义一个类使该类继承父类,那么该类就是此父类的子类该子类就自动拥有父类可继承下来的属性和方法。class 子类 extends 父类{}由刚才我们的实验 会发现 ADC类型中并没有定义name属性和发育的方法,但是在测试的类中会发现我们的adc引用可以调用name属性和发育方法由此可以证明,子类在继承父类的时候会自动的拥有父类的成员(成员变量、成员方法)
3、b,继承中的成员变量如果在继承的时候父类与子类都有成员变量如果成员变量的名字不一样那么好处理,如果成员变量的名字一样该如何处理。如果成员变量的名字一样 实验得到 他会给子类的成员变量赋值但是有的时候 我就需要给父类的成员变量赋值该如何做呢?
4、我们可以通过使用一个关键字 super他可以指定父类的属性(在子类中存在和父类有相同属性名的属性)c,继承的优缺点与需要注意的地方优点:Java继承可以增强代码的复用性。缺点:缺点就是类与类之间耦合性变高了。注意: 重点*****Java中的继承只支持单继承,不支持多继承这个和我们的现实生活很吻合,一个孩子只能有一个爸爸。但是一个父类可以有多个子类。一个爸爸可以有多个孩子。一个父类可以有多个子类一个子类只能有一个父类但是Java支持多重继承一个类可以有子类也可以有父类*****在Java的类结构中存在一个"祖宗类"该类是Java中所有类的直接或者间接父类该类的名字为 java.lang.Object,如果我们在编写一个类的时候 该类 没人继承任何一个类那么系统会默认使该类继承Object类。
5、d,继承中的成员方法1.子类成员方法和父类的成员方法名不同时 子类在调用成员方法的时候会先去子类中去找如果子类没有的再从父类中寻找。如 我们 的 Hero类和ADC类 在测试类中执行adc.showName()方法时,他会先在子类中寻找有没有一个方法的名字为 showName的,如果有则调用,如果没有他则会去父类中寻找有没有,发育同理showName();2.特殊情况 子类中的成员方法和父类中的成员方法同名重写-->重写只发生在父子类中覆盖为什么会有重写呢?父类提供的方法不能够满足子类的要求。程序在执行的时候肯定会执行重写后的方法。方法名相同的情况下也会执行子类,如果父类方法有用可以再执行之前通过super关键字来调用父类的方法做一些前置的工作。3.重写的注意事项子类在重写父类的方法的时候子类的方法名必须要和父类的方法名保持一致,并且参数列表也要保持一致。而且重写后的方法访问修饰符的范围不能小于重写前的访问修饰符范围。private publicJava中的几个访问修饰的控制范围公开的>受保护的>默认>私有的public>protected>默认不写>private在Java提供了一个验证方法是否是重写的标签@Override 写在需要验证的方法上面,如果该方法的确是一个重写的方法,那么就会编译通过,如果该方法不是重写父类的方法,那么就会编译不通过。重载和方法的返回值类型有没有关系?方法的重载只有参数列表有关,和返回值类型无关!!!重写和方法的返回值类型有没有关系?有关系如果返回值类型是基本数据类型那么子类和父类的返回值类型必须要保持一致如果返回值类型是引用数据类型那么子类的方法返回值类型不能大于父类的方法返回值类型。重写的方法和异常也有关系(讲到异常的时候再说)重写总结 *****1.子类方法的修饰符>=父类的方法修饰符2.子类方法的返回值<=父类的方法返回值(仅限引用类型,基本类型要一致)3.子类与父类的方法 方法名参数列表必须要一致4.Java提供了一个验证重写标签@Override5.子类方法抛出的异常范围不能大于父类方法抛出的异常(异常的时候再演示)下课 自己编写一个子类一个父类 验证 12343.抽象类、抽象方法引入:比如说现在我们有一个动物类,还有一个狗类,还有一个猫类所有的动物都会吃东西,所以我们将狗和猫的吃的方法写到了动物类里面,然后让 狗 和 猫 继承 动物类。问题:猫吃鱼 狗吃肉,你告诉我 动物类里面的吃 到底吃什么?Animal{eat{}}Cat extends Animal{}Dog extends Animal{eat(){ 吃肉}}
6、a,抽象方法在我们的实际开发过程中有时候父类中定义的方法我们根本就不知道如何实现才能匹配所有子类的需求。所以我们将这类不知道怎么去实现的方法给他定义成抽象方法。如果一个类包含了抽象方法,那么该类就必须是一个抽象类。有抽象方法的类一定是抽象类c,如何定义抽象类和抽象方法在需要定义的类或方法前面添加一个修饰符abstract 在类上面添加 那么该类就是抽象类在方法上面添加 那么该类就是抽象方法d,抽象类抽象类中可以没有抽象方法,如果一个抽象类没有抽象方法我为什么要定义成抽象类?那么没有抽象方法的抽象类有意义吗?有意义,意义在于不让别人new他,不要别人创建该对象抽象类不能new抽象类存在的意义就是被继承。如果一个类继承了抽象类,那么该类就必须要实现所有的抽象方法。如果不实现除非该类也是一个抽象类。
7、今天课程内容总结1.继承a,继承的语法格式 使用 extends关键字b,继承的优缺点c,继承的成员变量的处理(同名,不同名)d,继承的成员方法的处理(同名,不同名)e,方法重写的注意事项(5条)2.抽象类a,为什么有抽象方法b,如何定义抽象类和抽象方法c,抽象方法与抽象类之间的一些关系有抽象方法的类一定是抽象类抽象类中不一定有抽象方法d,抽象类不能newe,继承一个抽象类必须要实现抽象类里面的所有抽象方法如果不实现除非该子类也是一个抽象类。