2018.9.18学习笔记(多态,抽象abstract,接口)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Haidaiya/article/details/82770752

1 多态(记住动物和猫的关系)

其中Animal   a = new  Cat();表示父类引用指向子类对象,这就叫多态。

由于多态左边为父类右边为子类,那么就牵扯到了几个问题。

2 多态带来的问题

当父类和子类中都写了相同的变量名和方法名的时候,创建对象   父类    对象 =   new  子类()。这个对象使用变量和方法使用的父类的还是子类的呢?

编译看左边,运行看右边

关于多态,其实用Animal  c =  new  Cat()的用法并不多,因为这样用Cat类的属性和静态的方法会很不方便,需要使用变量提升才能将Animal对象向下转型。而在形式参数时就会经常用到,我么可以在形式参数中直接写Animal  an  而不需要写Cat   c或者Dog  d或者Pig p了。

3 instanceof

如果a是一只猫。

4 抽象abstract

抽象一般用在父类上,并且这个父类是模糊的,比方说动物,没有人能描述什么叫做动物,所以上面Animal就是抽象的,那么我们可以写一个Cat子类,并且在子类中必须要实现父类的抽象方法,这样可以通过Animal   c = new Cat()创建对象,并且调用eat方法。

例如:在子类Test中必须实现父类的method()方法,父类越模糊,月应该用abstract修饰。

5 接口

java中为什么会有接口呢?上面介绍的抽象类,我们会发现,如果一个抽象类中都是抽象方法,这些方法都需要子类实现,那么就可以把这个类定义为一个接口。

接口的定义和实现如上图所示,

因为接口也是一个类,所以他会有成员变量,成员方法,但是他的成员变量是常量(不能改变)是静态的(可以通过接口名直接访问)

还有一点需要注意一下,接口和父类的区别在哪呢?通俗说来,接口是干爹,但是父类是亲爹,比如在子类中(实现接口的那个类)写super();语句,super代表的是OBject,而不是那个接口,也证明了接口是没有构造方法的。

6 抽象类与接口的区别

猜你喜欢

转载自blog.csdn.net/Haidaiya/article/details/82770752