封装、继承、多态、接口和抽象类

1 封装

    即隐藏对象的属性和实现细节,仅对外公开接口。例如,我们将类的属性定义为private,只提供给用户使用属性的public方法。

    作用:(1)更安全的访问 (2)提供统一的访问接口

2 继承

    继承就是子类继承父类的特征和行为。

    作用:代码复用,有利于程序扩展,最重要的是能够实现多态

3 多态

    接口的多种不同的实现方式即为多态。简单来说,即一个对象具有不同的形态。

    Animal a=new Bird();

    鸟这个对象具有动物形态。

    Bird b=new Bird();

    鸟这个对象具有鸟形态。

3.1 多态的两个重要的原则

   (1)子类可以当作父类对象来看,我们一旦这样做了,那么子类就只能使用父类的方法和属性。

       Animal a=new Bird();编译器会主观的认为Bird对象是Animal,如果让a使用鸟的方法a.sing(),编译会出错

   (2)如果子类覆盖了父类的方法,我们把子类当作父类对象来看,去调用这个方法的时候,调用的是子类的方法。我们知道编译器主观的认为Bird是动物,但是,运行的时候JVM(上帝)是具体的知道鸟这个对象就是鸟。

我们知道鸟吃虫子,狮子吃肉这种自然规律。我们让鸟吃肉,狮子吃虫子是实现不了的。因此,鸟和狮子类都重写了eat(),JVM会主动调用子类的eat()。

3.2 子类如何获取父类形态

    JAVA提供了语法规则:(1)任何子类都有构造方法 (2)任何子类生成对象都要调用父类的构造方法

    子类对象使用了父类的一些属性和方法,因此,必须通过父类的构造函数来初始化。子类对象也因此获得了父类的形态。

4 接口和抽象类的区别

   区别:

   (1)接口没有构造方法,而抽象类有构造方法

   (2)接口可以多继承,而抽象类只能单继承

   (3)接口中的方法都是抽象的,而抽象类中的部分方法是可以在抽象类中是实现的。

   (4)子类实现了接口,那么子类必须实现接口中提供的所有方法。而抽象类中的方法,可以在抽象类中默认实现,也可以在子类中继续定义为抽象方法。

   简单来说,抽象类是亲爹,而接口是干爹。亲爹只有一个,而干爹可以有多个。子类既可以继承亲爹的财产,也可以继承干爹的财产。但是,亲爹和干爹的有个本质的区别,那就是血缘关系,这种血缘关系是通过构造方法来体现的。子类对象的创建必须调用父类的构造方法。

   

发布了146 篇原创文章 · 获赞 91 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/A1342772/article/details/91999933