阶段二12_面向对象高级_继承1

一.继承的入门介绍

(1)继承的概念理解
让类与类之间产生关系(子父类关系),子类可以直接使用父类中非私有的成员

(2)通过extends关键字实现继承
格式:public class 子类名 extends 父类名 { }
范例:public class Zi extends Fu { }
Fu:是父类,也被称为基类、超类
Zi:是子类,也被称为派生类

二.继承的好处和弊端

(1)继承的好处
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提

(2)继承的弊端
继承是侵入性的
降低了代码的灵活性
继承关系,导致子类必须拥有父类非私有属性和方法,让子类自由的世界中多了些约束
增强了代码的耦合性
代码与代码之间存在关联都可以将其称之为"耦合"。

(3)耦合性:代码与代码之间存在关联都可以将其称之为"耦合"。
图:05/0_耦合性关系说明图.PNG
在这里插入图片描述

(4)什么时候使用继承?
当类与类之间,存在相同 (共性) 的内容,并且产生了 is a 的关系,就可以考虑使用继承,来优化代码。
举例:
学生:姓名,年龄 项目经理:姓名,工号,工资
老师:姓名,年龄 程序员:姓名,工号,工资


人:姓名,年龄 员工:姓名,工号,工资

(5)继承的好处和弊端总结
好处:提高了代码的(复用性、维护性),是多态的前提
弊端:降低了代码灵活性,增强了代码的耦合性

三.继承的特点

(1)Java只支持单继承,不支持多继承,但支持多层继承。
单继承:子类只能继承一个父类
不支持多继承:子类不能同时继承多个父类

(2)问题: 为什么不支持多继承

 public class 父类A { public void method(){System.out.println("复习数学");  } }
   public class 父类B { public void method(){ System.out.println("复习语文");} }
   public class 子类 extends 父类A , 父类B { }
   public class Test {
     public static void main(String[] args) {
          子类 z = new 子类();
          z.method();   // 复习啥?懵了!不知道调用哪个了。
     }
   }

四.继承的成员变量访问特点

在子类方法中访问一个变量
子类局部范围找 --没有–>子类成员范围找 --没有–> 父类成员范围找。
注意:
如果子父类中,出现了重名的成员变量,通过就近原则,会优先使用子类的
如果一定要使用父类的,可以通过super关键字,进行区分。
案例:

 public class Fu {  int a = 10; }
   public class Zi extends Fu {
     // 子父类当中, 出现了重名的成员变量
     int a = 20;
     public void method(){
        int a = 30;
        System.out.println(a);  //子类局部范围找 --没有-->子类成员范围找 --没有--> 父类成员范围找 【30】
        //需求1: 在控制台打印本类成员变量 20
        System.out.println(this.a);  //通过this关键字
        //需求2: 在控制台打印父类成员变量 10
        System.out.println(super.a); //通过super关键字
     }
   }

五.继承的成员变量访问特点

super 关键字的用法和 this 关键字的用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象引用)
图:05/1_this和super访问使用说明.PNG
在这里插入图片描述

六.方法重写

(1)方法重写概述
在继承体系中,子类出现了和父类中一模一样的方法声明

(2)方法重写的应用场景
当子类需要父类的功能,而功能主体子类有自己特有内容,可以重写父类中的方法,
这样,即沿袭了父类的功能,又定义了子类特有的内容

(3)注意:
方法重写: 在继承体系中, 子类出现了和父类一模一样的方法声明 (方法名, 参数列表, 返回值类型)
方法重载: 在同一个类中, 方法名相同, 参数列表不同, 与返回值无关.

(4)练习:手机类和新手机类

public class iPearV1 {
    /*
        1. 定义手机类 iPearV1  
        call(String name) : 打电话方法  
        smallBlack() : 语音助手 (speak english...)
     */
    public void call(String name){
        System.out.println("给" + name + "打电话");
    }

    public void smallBlack(){
        System.out.println("speak english...");
    }
}
public class iPearV2 extends iPearV1 {
    /*
      2. 定义新手机类 iPearV2
        call(String name) : 打电话方法
        smallBlack() : 语音助手 (speak english...  说中文)
       方法重写的应用场景:
         当子类需要父类的功能,而功能主体子类有自己特有内容
         可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容
     */

    public void smallBlack(){
        super.smallBlack();
        System.out.println("说中文");
    }
}

public class TestOverride {
    /*
        需求:
        1. 定义手机类 iPearV1
           call(String name) : 打电话方法
           smallBlack() : 语音助手 (speak english...)
        2. 定义新手机类 iPearV2
           call(String name) : 打电话方法
           mallBlack() : 语音助手 (speak english...  说中文)
        注意:
            方法重写: 在继承体系中, 子类出现了和父类一模一样的方法声明 (方法名, 参数列表, 返回值类型)
            方法重载: 在同一个类中, 方法名相同, 参数列表不同, 与返回值无关.
     */
    public static void main(String[] args) {
        iPearV2 i = new iPearV2();
        i.smallBlack();
    }
}

七:方法重写注意事项

(1)父类中私有方法不能被重写
(2)父类静态方法,子类必须通过静态方法进行重写,父类非静态方法,子类也必须通过非静态方法进行重写
注意:静态方法不能被重写!如果子类中,也存在一个方法声明一模一样的方法
可以理解为,子类将父类中同名的方法,隐藏了起来,并非是方法重写

(3)子类重写父类方法时,访问权限必须大于等于父类
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java之书

会持续更新实用好的文章谢谢关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值