Java继承

1.继承
    is...a
    继承 就是让类与类之间产生关系-->父子关系
    格式
        class 类名1 extends 类名2{
        
        }
        类名1 继承于 类名2
        类名1 是类名2的儿子
    继承的好处和弊端:
        好处:  
            1.提高了代码的复用性
            2.提高了代码的维护性
            3.让类与类之间产生了关系 是多态的前提
        弊端:
            1.类的耦合性增强了
                开发的原则 高内聚 低耦合
                内聚:就是自己完成某件事的功能
                耦合:类与类产生了关系
        java中类的继承特点:
            1.java中类只支持单继承 不支持多继承
                一个儿子 只能有一个爹
                c++ 就支持多继承 格式 extends A,B
            2.java支持多层继承(继承体系)
            3.一个父类 可以有多个子类
        注意事项:
            1.不能因为部分共性的内容 而盲目继承
                猫 吃饭 睡觉 颜色
                人 吃饭 睡觉 颜色
            2.子类只能继承父类非私有的成员(成员变量 成员方法)
            3.父类的构造方法 不能被子类继承 但是可以通过super()进行调用
    继承中成员之间的关系
        1.成员变量
            同名的变量
                如果子类中有和父类同名的成员变量
                调用子类自己的(开发中没有这么写的)
            不同名的变量
                如果子类和父类没有同名的成员变量
                this 代表的是当前对象的引用 既可以调用本类的 也可以调用从父类继承过来的成员
                super 代表的父类的引用 只可以调用父类的成员
        2.成员方法
            同名的方法
                当子类出现和父类一模一样的方法时
                子类对象调用该方法 会运行子类中的方法

                如同 父类中的同名方法 被覆盖了一样
                这种情况 叫做方法的另一个特征 重写

                Override
                注意事项:
                    1.父类中私有的方法 不能重写
                        因为根本无法被继承
                    2.子类重写父类的方法时 访问权限修饰符不能更低
                        要么就一样 要么就更大
                        public > 默认 > private
                        最好就和父类一模一样
                Override和Overload的区别?
                    重写:有父子继承关系 方法声明一模一样
                    重载:在同一个类中 方法名相同 参数列表不同 与返回值无关
            不同名的方法
                子类对象可以直接调用不同名的方法
                但是父类私有的 子类不能调用
        3.构造方法
            因为子类会继承父类中的数据
            可能还会使用父类中的数据
            所以 创建子类对象之前 先完成父类数据的初始化
            调用父类的构造方法
            创建子类对象会调用父类构造方法 但是不会创建父类对象
            只是调用父类构造方法 完成初始化父类成员的功能

            子类 z = new 子类();
            调用子类的构造方法
            先执行了父类的构造 初始化父类非静态属性 声明普通方法
            然后执行了创建子类对象 初始化子类非静态属性 声明普通方法

            在堆内存中 
            你能看到的 只有一个子类对象
            但是在子类对象的空间里面
            隐含着从父类继承过来的属性和方法
                想调用父类的构造方法 可以使用super()来调用
                默认情况下 子类的无参构造方法第一句隐含了super()


2.super关键字
    总结:
        this关键字代表当前对象的引用 谁调用我 我就代表谁
        super关键字代表父类的引用

        this和super的区别:
            1.调用成员方法:
                this.成员方法 可以调用本类的 也可以调用从父类继承来的
                super.成员方法 只能继承自父类的
            2.调用成员变量:
                this.成员变量 可以调用本类的 也可以调用从父类继承来的
                super.成员变量 只能继承自父类的
            3.调用构造方法
                this()调用本类构造
                super()调用父类构造
                    每一个构造方法第一句默认都是super()
                Object类是最顶层的父类 是所有类的根类
3.final关键字
    最终 最后

    继承的出现 让类与类之间产生了关系 打破了类的封装性
    final关键字 修饰类 被它修饰的类不能被继承 保证了类的封装性

    final关键字的特点:
        final关键字 可以修饰 类 / 方法 / 变量(成员变量和局部变量)

        final修饰类:
            类不能被继承
        final修饰方法:
            方法不能被重写(覆盖)
        final修饰变量:
            包括成员变量和局部变量
            被final修饰的变量 就变成了常量
            只能被赋值一次
        常量 命名规则:
            如果是一个单词 所有字母都大写 NUM
            如果是多个单词 每个单词都大写 中间用下划线分割 STUDENT_NUMBER
        final修饰的变量 一般会和 public static 一起使用 ---> 全局静态常量

        private修饰符 和 final修饰符的区别
            private 是权限修饰符
                可以修饰 成员(成员变量和成员方法)
                被私有修饰的成员将不能被继承
            final 是修饰符
                可以修饰 类/成员/局部变量
                被final修饰的类不能被继承 方法不能被重写 变量是常量
            
4.抽象
    概念:
        当编写一个类的时候 常常会定义一些方法
        这些方法用以描述该类的行为
        这些方法都有具体的方法体
        但是在某种特殊情况下 某个父类只是知道应该包含什么方法
        却不知道该方法是如何实现的 那么我们可以提供抽象方法 并将类声明为抽象类

        abstract 抽象
    语法:
        抽象类 
            [访问权限修饰符] abstract class 类名{
                抽象方法
                普通属性
                普通方法
            }
        抽象方法
            [访问权限修饰符] abstract 返回值类型 方法名(参数列表);
    抽象方法和抽象类
        抽象类的特点:*****
            1.抽象方法一定在抽象类中
            2.抽象方法 和 抽象类 都是必须用abstract修饰
            3.抽象类有构造方法
                但是不可以用new 创建对象 因为可能会调用抽象方法 但是抽象方法没有方法体 调用没意义
            4.抽象类中的抽象方法要被使用 必须由子类重写其所有的抽象方法
                建立子类对象 去调用
                如果只重写了部分抽象方法 那么子类也是抽象类
            5.抽象类中可以包含抽象方法 也可以包含非抽象方法
                当一个方法被抽象修饰后 他所在的类必须是抽象类
                抽象类中可以不定义抽象方法

                如果一个抽象类中没有抽象方法
                那么定义这个类的目的 就只有一个 就是不让该类创建对象
    为什么用抽象 抽象有什么好处?
        1.强制子类重写抽象方法
        2.父类定义功能 功能体由子类完成
            当有父类的时候 可能还没有子类的
            但是我知道 我的子类都要去做某件事 那么声明方法 但是不给方法的具体实现方式 由子类实现

            例如: 公司 员工 work(){?????}
                   讲师 work(){讲课}
                   就业老师 work(){就业}
                   招生老师 work(){招生}
                   前台老师 work(){接待}
                   财务老师 work(){发工资 收学费}
    
    private static final abstract 能否一起使用 修饰方法
        abstract可不可以 与 final private static共存

            abstract 和 static 不能一起使用
                因为static修饰的成员方法 多了一种调用方式 类名.调用
                    静态与类相关 与对象无关
                    调用抽象方法 没意义 所以不行
            abstract 和 final 不能一起使用
                final修饰不能被重写
                abstract 要求子类必须重写
            abstract 和 private 不能一起使用
                private不能被继承 何谈被重写
    static final abstract的区别
        static:
            属性    共有的 类名直接调用
            方法    共有的 类名直接调用
                不能用this/super
                只能直接调用静态 
                通过创建对象 可以调用非静态
            代码块
                随着类的加载而加载 只执行一次
        final:
            属性/局部变量 是常量
            方法 不能被重写
            类 不能被继承
        abstract:
            方法 抽象方法 只能放在抽象类中
                 想要使用 必须在子类中重写
                 构造方法 不能被abstract修饰
                 static方法 不能被abstract修饰
            类 抽象类 不能被实例化 但是有构造方法
               抽象类中 可以有抽象方法 和 非抽象方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值