LZ第一次写博文,语言组织不好,请大牛勿喷。
关于JAVA的继承相信很多人都知道,这是面相对象三大基本基本特征(封装,继承,多态)之一,当时LZ学到继承的时候就发现一个问题我们什么时候该用继承,
(有人开始解释:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。)
当LZ听到这样的解释就想一口盐汽水喷死你(不解释)。当我们要写一个项目的时候如果我要创建一个Dog类(很多老师喜欢那狗来举例子,那我也顺便用一下,狗狗要听话,回来带你去吃狗肉火锅,嘿嘿)在main放法中我要调用该Dog类中叫的方法命名为say
()(由于LZ的词汇量有限就只想到这个单词)
代码如下:
public class AnimalDemo {
public static void main(String[] args) {
Dog d = new Dog();
d.say();
}
}
class Dog {
public void say() {
System.out.println("dog: 汪汪...");
}
}
当时LZ就想为什么不给他加一个父类Animal呢,然后让Dog类继承Animal类,当时学JAVA这个问题很久就比如接口我怎么感觉没什么用呢,他又不能实现方法,只能定义一些静态变量。现在我们还要一个Cat类,里面也有一个Say方法,我们也在main方法中通过一个AnimalSay()方法调用他们say()方法,
代码如下:
public class AnimalDemo {
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
animalSay(d);
animalSay(c);
}
public static void animalSay(Object o) { // 注意形参为Object
if(o instanceof Dog) { // 判断是对象o是否为Dog的实例
Dog d = (Dog)o;
d.say();
}
if(o instanceof Cat) {
Cat c = (Cat)o;
c.say();
}
}
}
class Dog {
public void say() {
System.out.println("dog: 汪汪...");
}
}
class Cat {
public void say() {
System.out.println("cat: 喵喵...");
}
}
这是有人会说这不就是静态多态,当然我不是为了说明什么是静态多态来写这文章的,
现在让我们看看如果我们加一个Animal虚类,让Cat和Dog类来继承Animal类在将animalSay()方法修改一下看看是怎么样的。
代码如下:
public class AnimalDemo {
public static void main(String[] args) {
Dog d = new Dog();
Cat c = new Cat();
animalSay(d);
animalSay(c);
}
public static void animalSay(Animal o) { // 注意形参变成了Animal
o.say();
}
}
abstract class Animal {
public abstract void say();
}
class Dog extends Animal {
public void say() {
System.out.println("dog: 汪汪...");
}
}
class Cat extends Animal {
public void say() {
System.out.println("cat: 喵喵...");
}
}
又有人说这是动态多态嘛,现在我们发animalSay()方法中就变得简洁多了,而且不管我们创建什么类猪啊,鸟啊,人啊,只要从Animal继承,就只要调用animalSay()方法就行了,多省事啊,(完全符合程序员懒惰的性格)这就是用多态的好处代码重用。
总结:继承(不管是继承类还是实现接口)的目的是实现多态,而多态的目的是代码重用。