一、多态
多态性的定义是:同一操作作用于不同类的实例,将产生不同的执行结果,即是不同类的对象收到相同的消息时,得到不同的结果。多态的前提是要有继承关系和父类引用指向子类。
举例说明:
Chinese c=new Chinese();
Person p=new Chinese();
如上面的例子中国人也是人类的一种,那么就可以把中国人称为人类
1、多态中的成员访问特点
- 成员变量
编译看左边,运行看左边。 - 构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。 - 成员方法
编译看左边,运行看右边。 - 静态方法
编译看左边,运行看左边。
2、多态的优缺点
- 优点:提高了代码的可维护性和扩展性。
- 缺点:不能访问子类中的独有的功能和属性(但是可以通过向下转型来实现访问)。
二、抽象类
通常可以说平行四边形具有4条边,或者更具体一点,平行四边形是具有对边相等特性的特殊四边形,等腰三角形是其中两边相等的三角形,这些描述都是正确的,但是如果我们说图形对象,我们却没有办法具体的说出它是什么,究竟是什么图形,三边的还是四边的没人能说清,这种类在java中我们定义为抽象类。
一般我们把父类定义为抽象类,需要使用这个父类进行继承与多态处理。在java中抽象类不可以实例化对象,因为图形类并不能抽象出任何一种具体的图形,但是它的子类可以。抽象类的语法如下:
public abstract class Fu{ //定义抽象类
abstract void fuAbstract(); //定义抽象类方法
}
其中,abstract是定义抽象类的关键字。使用abstract关键字定义的类为抽象类,而使用这个关键字定义的方法为抽象方法。抽象方法没有方法体,这个方法本身没有任何意义,除非它被重写。抽象类的子类要么是抽象类要么就是重写抽象类中的抽象方法
抽象类的成员特点:
- a)成员变量:既可以是变量,也可以是常量。
- b)构造方法:可以有构造方法,用于子类访问父类数据的初始化。
- c)成员方法:既可以是抽象的,也可以是非抽象的。
抽象方法可以强制子类做一些事情,而非抽象方法则可以被子类继承,提高了代码的复用性。
三、接口
当一个父类有一个抽象方法的时候我们的每个子类都要重写这个方法来处理。但是这样会使程序中有太多的冗余代码,无论子类是否需要这个方法都要进行重写。所以我们就有了接口的概念,我们可以把父类中的那个抽样方法放置在另一个类中,让需要改方法的去使用他,这样就能减少了代码的冗余。简单来说接口用来实现一些扩展功能。
例如当一只狗被人类训练的能跳高,但是不是所有的狗都会跳高,那么我们就能把跳高这个行为放到接口类中,让那些会跳高的狗来使用它。
我们用interface关键字来定义接口,语法如下:
public interface jumpTest{
pinlic abstract void jump(); //接口内的方法
}
一个类实现一个接口可以用implements关键字,代码如下:
public class Dog implements jumpTest{
...//
}
1、接口成员的特点
- 成员变量:成员变量只能是常量,且是静态的,默认的有public static final修饰。
- 构造方法:在接口中没有构造方法。
- 成员方法:接口中只能是抽象方法,默认有public abstract修饰。
2、类与接口之间的关系
- 类与类:类与类之间是继承关系,只能单继承和多层继承;
- 类与接口:它们之间是实现关系,可以单实现也可以多实现,并且可以在继承一个类之后实现接口。
- 接口与接口:接口与接口可以单继承,也可以多继承。
一个类实现多个接口的时候,接口之间用逗号“,”分隔 ,在实现一个接口时,要进行方法重写。