接口、继承和多态

  学习好继承和多态是面向对象开发语言中非常重要的一个环节,如果在程序中使用继承和多态得当,整个程序的架构将变得非常有弹性,同时可以减少代码的冗余性。继承机制的使用可以服用一些定义好的类,减少重复代码的编写。多爱机制的使用可以动态调整对象的调用,降低对象之间的依存关系。为了优化继承与多态,一些类除了继承父类外还是用接口的形式。java中的类可以同时实现多个接口,接口被用来建立类与类之间关联的标准。正因为使用了这些机制,才使java语言更具有生命力。

掌握类的继承,掌握Object类中的几个重要方法,掌握对象类型的转换,掌握使用instanceof操作符判断对象类型,掌握方法的重载,掌握多态技术,掌握使用抽象类与接口。

重写父类方法时,修改方法的修饰权限只能ongoing小的范围到大的范围改变,例如,父类中的doSomething()方法的修饰全效为protected,继承后子类的方法doSomething()的修饰权限只能修改为public,不能修改为private。

调用构造方法的顺序:首先是顶级父类,然后是上一级父类,最后是子类。也就是说实例化子类对象首先要实例化父类对象,然后再实例化子类对象,所以在子类构造方法访问父类的构造方之前,父类已经完成实例化操作。


Object类

在java中,所有的类都直接或者间接继承了java.lang.Object类。他是所有类的父类,是java类层中的最高层类,当创建一个雷是,总是在继承,除非某个类已经制定要从其他类吃撑,否则他就是从java.lang.Object类继承而来的,可见java中的每个类都源于java.lang.Object类,如String、Integer等,类都是集成与Object类;除此之外自定义的类也都集成与Object类。所有的类都是Object的子类,所以在定义类的时,省略了extends Object关键字。

Object类中主要包括clone,finalize,equals,toString



对象类型的转换

向上转型,就是把子类对象赋值给父类类型的变量,这种技术被称为向上转型。子类对象用父类的构造方法。

向下转型,就是把父类对象赋值给子类类型的变量。在做向下转型操作是,将特性范围小的对象转换为特性范围大的对象肯定会出现问题,所以这是需要告知编译器这个四边形就是平行四边形。将父类对象强制转换为某个子类对象,这种方式称为显示类型转换。


方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。为了更好地解释重载。

多态,利用多态可以使程序具有良好的拓展性,并可以对所有类对象进行通用的处理。可以作为父类的对象实例使用,这种将子类对象视为父类对象的做法称为“向上转型”。假设如现在需要绘制一个平行四边形,这时可以在平行四边形中定义一个draw(方法,具体实现代。

如果需要定义一个绘制正方形的方法,通过定义一个正方形类来处理正方形对象,会出现代码冗余的缺点;通过定义一个正方形和平行四边形的综合类,分别处理正方形和平行四边形对象,也没有太大的意义、


抽象类

在解决实际问题是,一般讲父类定义为抽象类,需要使用这个父类进行集成与多态处理。回想集成和多态原理,继承书中越是在上方的类月抽象,如鸽子类集成鸟类、鸟类集成动物类。在多态机制中,并不需要将父类初始化对象,我们余姚的知识子类对象,所以在java语言中设置抽象类不可以实例化对象,因为图形类不能抽象出任何一种具体图形,但它的子类却可以。

其中,abstract是定义抽象类的关键字。

使用abstract关键字定义的类称为抽象类,而使用这个关键字定义的方法称为抽象方法,抽象方法没有方法体,这个方法本身没有任何意义,除非他被重写,而承载这个抽象方法的抽象类必须被继承,实际上抽象类除了被继承之外没有任何意义。

反过来讲,如果生命一个抽象的方法,就必须将城在这个抽象方法的类定义为抽象类,不可能在非抽象类中获取抽象方法。话句话说,只有勒种有一个抽象方法,此类就被标记为抽象类。继承抽象类的所有子类需要将抽象类中的抽象方法进行覆盖。这样在多态机制中,就可以将父类修改为抽象类,将draw()方法设置为抽象方法,然后每个子类都重写这个方法来处理。但折优惠出现我们刚探讨多态时讨论的问题,程序中会有太多荣誉的代码,同时这样的父类局限性很大。也许某个不需要draw()方法的子类也不得不重写draw()方法,类不能同时继承多个父类,面临这种问题,接口的概念边出现了。


接口简介

    public interface drawTest{}.

    接口中定义的方法必须被定义为public或者abstract形式,其他修饰全线不被java编译器认可。

    接口中的成员变量必须用 public static final 来定义   public static final int i=10;

    接口里面的东西只能读不能改,从满足其的抽象性。

       通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则的一种体现。

    接口与继承,不可以实现多重继承,但是可以使用接口就可以实现多重继承,因为一个类可以同时实现多个接口,这样可以将所有需要继承的接口防止在implements关键字后并用逗号隔开,但这可能会产生庞大的代码量。

接口是抽象类的延伸,可以将它看作是纯粹的抽象类,接口中的所有方法都没有方法体。

public interface drawTest{

}


猜你喜欢

转载自blog.csdn.net/qq_36344771/article/details/80487047