java继承派生和多态详解

继承

继承,顾名思义,就是把已经有的拿过来归为己用,java中的继承也不例外。
举个例子,假如现在有这样一个需求,让我们写一个关于狗的Dog类,Dog类中有狗的名字、年龄,还有狗的两种行为,也就是这个类的两种方法,分别是run(跑)方法和bark(犬吠)方法,那么我们就可以这样写:

public class Dog {
	String name;
	int age;
	
	public void run()
	{
		System.out.println("狗在跑!");
	}
	public void bark()
	{
		System.out.println("狗在叫!");
	}
}

很好,我们实现了Dog这个类,那么现在如果让我们写一个拉布拉多类(狗的一种)呢?显然,拉布拉多也具有名字、年龄、跑、叫的行为,那么如果我们从头开始写拉布拉多这个类,就太麻烦了,我们还要重新写一遍刚才写的东西,这个时候,就要用到继承,所以我们可以这样去写:

public class Labuladuo extends Dog {
	
}

extends是继承的关键字,通过extends,我们实现了让拉布拉多这个类继承了Dog这个类,这不难理解,毕竟,拉布拉多就是狗的一种嘛。现在,由于我们的访问权限设置的都是public,那么父类具有的东西子类也有,于是,拉布拉多也有了名字、年龄两个成员变量,有了跑和叫两个方法。

那么派生是什么呢?

顾名思义,派生是在继承了一些东西的基础上增添了新的东西,派生是依存于继承的,子类在拿来父类的东西去使用的同时,可以增添新的东西或者对继承来的东西进行覆写让其适用于子类。例如,我们现在在继承了Dog类的拉布拉多类中新增一个给盲人导盲的方法daoMang(),那么,我们仅仅用子类对象才能调用这个方法,而用父类对象无法调用,因为这个方法是子类拉布拉多类独有的,也就是说,这是从父类的基础上拓展出来的方法,也就是派生。此时的拉布拉多,既可以使用父类Dog类的所有狗都共有的run和bark方法,也同时具有了Dog类的name和age的狗的基本属性。

public class Labuladuo extends Dog {
	public void daoMang()
	{
		System.out.println("我会导盲!");
	}
}

多态

多态顾名思义就是一个事物有多种状态,在java中指的是继承父类或者实现接口时有多种继承状态和实现方式。

很多搞不清楚多态是什么的人都是因为不清楚多态的应用场景和优点是什么,多态主要有如下两个应用:

1.开发人员不必为每一个子类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

例如我们上面的代码,Dog类是各种狗的基类,Dog中的run方法虽然各种狗都继承了下来,但是,针对于所有狗来说,每种狗的跑步方式不一样,这时,我们就可以在每种狗类中覆写这个run方法,这样,每种狗就实现了不同的跑步状态,这就是多态。

2.派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性

举个例子,我们现在有一个猫类,派生出了波斯猫,橘猫,布偶猫几种子类,现在我们想要获取猫的shape,如果我们再用**波斯猫 c = new 波斯猫()然后使用c.shape()获取未免有些太麻烦而且不合逻辑了,毕竟,我们想要的是猫普遍的形状,而不单单是波斯猫的形状,这时我们可以直接用猫 c = new 波斯猫()**然后用c.shape直接就可以获取猫的形状,这样方便了许多而且更符合逻辑了。

猜你喜欢

转载自blog.csdn.net/qq_37856300/article/details/83383856