Java中多态和抽象类的定义及说明

多态

定义:在同一时刻体现出事物的不同状态。

多态的前提条件是:他必须有继承关系,

                                父类的方法也必须是被重写的, 

                                最主要的就是父类引用指向子类(向上转型)。

多态中成员访问特点:

                                   成员变量:编译看等号左边,运行看等号右边。

                                   构造方法:在多态中,父类对象的创建通过new子类名(),优先让子类进行初始化。

                                   非静态的成员方法:由于存你在方法重写,就是编译看等号左边,运行看等号右边。

                                   静态的成员方法:静态成员方法的话可以说不是方法重写,因为静态是跟类有关系的,

                                                                 编译看等号左边,运行看等号右边。

多态的话有好处也有弊端;

  好处就是提高了程序的维护性,也提高了代码的扩展性。

 弊端就是多态中是无法访问子类的特有方法的。

  如果想要访问子类特有的方法必须向下转型

格式:子类名 对象名 = (子类名)父类引用;

                     Zi zi = (Zi)fu;

需要注意的是:向下转型使用不当会出现一个异常(class CastException)类型转换异常,运行时期的异常。

方法重写的细节:子类重写父类方法,访问权限不能比父类访问权限低,必须和父的权限修饰符一摸一样。

抽象类(abstract)

定义:描述一件事的时候,没有足够的信息去进行描述,这时就是抽象事物,定义为抽象类。

特点:①抽象类抽象方法都必须被abstract修饰,抽象方法也是定义在抽象类中的。

           ②:抽象类不可以创建实例对象。

           ③:子类·只有覆盖了抽象类中的抽象方法之后,子类才可以创建实例,要不然子类还是一个抽象类。

抽象类需要注意:

             ①:抽象类是一个父类,是子类的共性方法不断抽取而来的。

             ②:抽象类有构造方法,虽然不能给自己初始化,但是可以给自己的子类初始化。

             ③:抽象类是可以不定义抽象方法的,抽象类存在的意义就是不让该类创建对象。

抽线类和一般类的异同点:

 相同点:

           ①:他们都是用来描述事物的。

           ②:他们之中都可以定义属性和行为。

不同点:

           ①:一般类是可以具体描述的事物的,抽象类描述的事物不具体。

           ②:抽象类是可以多定义一个成员的,抽象函数。

           ③:一般类是可以创建对象的,而抽象类创建不了对象。

抽象类关键字abstract不能共存的有:                 

            ①final:final修饰玩的类没由子类,而abstract必须有子类,二者冲突了。

            ②private:抽象方法是需要被覆盖的,而加上private之后是不能被覆盖的,所以不允许出现。

            ③static:抽象方法一但变成静态被类名调用没意义。

接口(interface)

定义:体现事物的一种扩展功能。

格式:

         定义变量:变量必须有固定的修饰符修饰,public static final,因为被final修饰,所以接口中的变量也被称为常量。

         定义方法:方法也是有固定的修饰符的,public abstract

 特点:

         ①:接口中的成员都是公共的。

         ②:接口不可以创建对象。

         ③:子类必须覆盖掉父类的抽象方法之后,子类才可以实例化,不然子类是一个抽象类。

 形式参数

        引用类型:

                       具体类:都需要创建该具体类对象。

                       抽象类:如果方法的形式参数是抽象类型,那么调用方法的实际参数需要该抽象类的具体对象。

                       接口:如果方法的形式参数是接口楼类型,那么调用方法的实际参数需要接口的子类实现。

抽象类和接口的区别

(1)成员区别

抽象类:成员变量既可以是常量也可以是变量

            抽象类存在抽象类,可以有参数也可以没有参数,抽象类是不可以实例化的,需要子类来实现。

            抽象类的成员方法既可以是抽象方法也可以是非抽象方法。

接口:成员变量只能是常量因为被final修饰。

           接口不存在构造方法。

           成员方法默认修饰符 public abstract

(2)关系区别

类与抽象类之间的关系:是继承关系(extends),只支持单继承,不支持多继承,但是可以多层继承。

类与接口之间的关系:实现关系(implement),一个具体类实现一个接口,一个类继承另一个类的同时,可以实现多个接口

接口与接口之间的关系:接口与接口之间是继承关系,可以单继承也可以多继承

(3)设计理念区别

抽象类:类与类之间的关系,is a 关系,说明子类是父类的一种。

接口:是like a 关系,主要就是扩展功能,后期通过学习就会的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值