您的位置:首页 > 编程语言 > Java开发

面向对象高级特性--类的继承、接口(概念类)

2018-03-31 17:50 483 查看

类的继承           

 类的继承
            在Java中定义一个类时,让该类通过关键字extends继承一个已有的类,这就是类的继承
            被继承的类称为父类(超类、基类),新的类称为子类(派生类)

            子类继承父类的所有属性和方法,同时也可以增加自己的属性和方法

继承的语法
            [修饰符] class 子类名 extends 父类名

继承的好处
            实现类的重用

            易于维护

继承的规则
            Java中只支持单继承,也就是说每个类只能有一个父类,不允许有多重继承

            一个父类可以有多个子类

            子类继承父类所有的属性和方法,但不继承父类的构造方法

子类的构造方法——子类不能继承父类的构造方法
            使用默认的构造方法

            在子类中创建构造方法

                    在子类中创建构造方法时,必须调用父类的构造方法

                    子类可以在自己的构造方法中使用super关键字来调用父类的构造方法

                             super(参数1,参数2);

                    如果使用super关键字调用父类构造方法,必须写在该子类构造方法的第一行

                    如调用的是父类中无参的构造方法,则可以不写super()

                    如果子类中调用了父类无参的构造方法,而父类中没有无参构造方法则系统编译出错

方法的覆盖(override)
        重写
        对从父类中继承来的方法进行改造

        在子类继承父类时发生

方法覆盖的规则
        在子类中的覆盖方法与父类中被覆盖的方法应具有
                相同的方法名

                相同的参数列表(参数数量、参数类型、参数顺序都要相同)

                相同的返回值类型

                子类覆盖方法的访问权限要不小于父类中被覆盖的方法的访问权限

final关键字
        final可以修饰的元素:
                类:不能被继承

                变量(属性和局部变量):不能被重新赋值(一般用于定义常量)

                        在声明的同时赋值

                        系统不会对final属性默认的赋初始值

                 方法:不能在子类中被覆盖,即不能修改(在子类中无法进行方法的重写)

接口(interface)

抽象方法
        只有方法声明,没有方法实现的方法
             [访问权限修饰符] abstract 返回值类型  抽象方法名(参数类型);
                    class A{
                            abstract int method1(int a,int b);         
                        }

抽象类
        抽象类是抽象方法和非抽象方法的集合
                    [访问权限修饰符] abstract class 类名{
                                                .....

                                                        }

        特殊情况
                全部是抽象方法

                全部为非抽象方法
        注意:
                抽象类不能被实例化;
                其包含的抽象方法必须在其子类中被实现,否则该子类中只能声明为abstract;
                抽象方法不能为static;
        在下列情况下,一个类必须声明为抽象类:
                当一个类的一个或多个方法是抽象方法时;
                当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
                当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;

接口的声明
       接口是一种特殊的抽象类,这种抽象类中只包含常量和抽象方法,而没有变量和方法的实现

              [访问权限修饰符] interface 接口名{
                                     接口的成员
                                           }
        接口的成员
                常量(字段)
                抽象方法
         注意
            接口不是一个类,没有构造方法,不能被实例化
            接口使用interface关键字来定义,而不是class
        接口默认:
            常量:public static final
            抽象方法:public abstract

拓展接口(接口的继承)
            interface A extends B{}

            interface A extends B,C,D{}

类实现接口——implements
       为了使用一个接口,你要编写实现接口的类

       如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类。

       多个无关的类可以实现一个接口,一个类可以实现多个无关的接口

        一个类可以在继承一个父类的同时,实现一个或多个接口

接口的意义
    接口可以实现多继承
        用接口可以实现混合类型(主类型,副类型),java中可以通过接口分出主次类型

        主类型使用继承,副类型,使用接口实现(无现实说法,意思就是一个实现类可以实现多个接口)

    接口可以使方法的定义和实现相分离,降低模块间或系统间的耦合性
        针对接口编程可以屏蔽不同实现间的差异,看到的只是实现好的功能。

引用数据类型的转换(对象造型)
        向上转型(Upcasting)——子类转换为父类,自动转换
            前提——具有继承或实现关系

            向上转换损失了子类新拓展的属性和方法
            仅可以使用父类中继承的属性和方法

        向下转换(Downcasting):强制转换
                将父类对象显示的转换成子类类型
                        Animal a = new Cat();

                        Cat c =(Cat) a;

instanceof 运算符
        判断一个类是否实现了某个接口

                对象   instanceof  接口

        判断一个实例对象是否属于一个类

                对象  instanceof  类

        它的返回值是boolean型的

多态
        一个对象具有多种特征,根据不用的情况来做出不同的响应

        多态存在的三个必要条件

                要有继承,或实现

                要有重用

                父类的引用指向子类的对象

         一旦满足以上3个条件,当调用父类中被重写的方法后,运行时创建的是哪个子类的对象,就调用该子类中重写的那个方法

         在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际类型调用相应的方法

多态的优点   
        简化代码

        改善代码的组织性和可读性

        易于拓展

 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息