多态性和抽象类以及接口

多态性:

面向对象三大特征:封装、继承、多态

封装是为了保护属性的一种操作,继承是为了扩展类的功能

而多态性是由封装性和继承性引出的面向对象程序设计语言的另一种特征

多态体现:

1)从方法的角度看:方法的重载和重写

a.重载(Overload):根据传入的参数不同,完成的功能也不同。

b.重写(Override):子类根据需求重写父类中的方法。

2)从对象的角度看:对象的多态主要分为两种:向上转型、向下转型

a.向上转型:子类对象->父类对象(程序自动完成,不需要强转)

  格式:父类 父类对象=子类实例;

  例如:Student类继承Person类(即Person类是Student类的父类)

  向上转型格式:Person person=new Student();

注意:向上转型后,因为操作的是父类对象,所以无法找到在子类中定义的新方法,但是如果子类重写了父类的某个方法,则调用的是重写后的方法。

b.向下转型:父类对象->子类对象(必须明确的指明要转型的子类类型)

  格式:子类 子类对象=(子类)父类实例

  例如:Student类继承Person类(即Person类是Student类的父类)

  向上转型格式:Person person=new Student();

                Student student=(Student)person;

注意:从上面的例子可以看出,向下转型前先要向上转型。

多态好处

a.提高代码的维护性(继承体现)

b.提高代码的扩展性(多态体现)

多态的弊端:父类不能使用子类的特有功能


抽象类:用abstract修饰的类即为抽象类

格式:abstract class 抽象类名{  }

注意:抽象类不能被实例化,必须被继承,抽象方法必须被重写,生成它的子类

抽象方法:用abstract修饰的方法就是抽象方法,抽象方法没有方法体

注意:抽象类中不一定要包含抽象方法,但抽象方法一定要在抽象类中。

如果一个子类中没有实现抽象父类的所有抽象方法,则该子类也是一个抽象类。

构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法

总结一下:

1.抽象特点

a.抽象类和抽象方法必须用关键字abstract修饰

b.抽象类中不一定有抽象方法,但包含抽象方法的类一定是抽象类。

c.抽象类不能被实例化

d.抽象类的子类:

  1)是一个抽象类

  2)是一个具体类。这个类必须重写抽象父类中的所有抽象方法。

2.抽象类的成员特点:

A.成员变量:有变量、有常量

B.构造方法:有构造方法

C.成员方法:有抽象方法、有非抽象方法

3.抽象类的几个小问题:

A.抽象类有构造方法,但是不能实例化,那么构造方法有什么用呢?

  答:用于子类访问父类数据的初始化。

B.一个类没有抽象方法却要定义为抽象类,有什么用?

  答:为了不让创建对象


接口(interface):是抽象方法和常量值的定义的集合。

接口是一种标准、契约。从本质上将,接口是一种特殊的抽象类,这种抽象类中 只能包含常量和方法的定义,而没有变量和方法的实现。
接口的声明语法:
[public] interface 接口名称 [extends listOfSuperInterface] {...}
接口体包含常量定义和方法定义:
a.常量定义:type NAME=value; 该常量被实现该接口的多个类共享,具有public,static,final的属性
   例如:int a=5; //在接口体中默认为 public static final int a=5;
b.方法体定义:具有public和abstract属性。 
   例如:public void method(); //默认为 public abstract void method();
接口实现类:与抽象类一样,如果要使用接口也必须通过子类,子类通过 implements关键字实现接口
注意:一个类可以实现多个接口,在implements子句中用逗号分开,非抽象子类必须实现接口中定义的所有方法。
实现格式:
class 子类 implements接口A,接口B…{...}
接口的使用规则:

a.接口中所有的方法都是public abstract
b.在接口中声明方法时,不能使用staticfinalsynchronizedprivateprotected等修饰符。
c.一个接口可以继承自另一个接口。
d.java中不允许类的多继承,但允许接口的多继承。
e.接口中可以有数据成员,这些成员默认都是public static final

接口的用途:

(1)通过接口实现不相关类的相同行为,而无需考虑这些类之间的关系.

(2)通过接口指明多个类需要实现的方法

(3)通过接口了解对象的交互界面,而无需了解对象所对应的类


类与接口之间的关系:

a.类与类:继承关系,只能单继承,可以多层继承

b.类与接口:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时,继承多个接口

c.接口与接口:继承关系,可以单继承,也可以多继承。

抽象类和接口的区别:

a.成员区别:

  抽象类:有变量、有常量

  接口:只有常量

b.关系区别:

  类与类: 继承,单继承

  类与接口: 实现,单实现,多实现

  接口与接口: 继承,单继承,多继承

c.设计理念区别:

  抽象类被继承体现的是共性功能

      接口被实现体现的是扩展功能

     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值