Java 的多态性、抽象类与接口

Java的多态性就是体现在‘向上转型(父类指向子类的引用)’、‘继承’、‘重写’  三个操作上,利用多态可以使得程序具有良好的扩展性,并可以对所有类对象进行通用处理。下面我们看具体实例:

1、我先定义了一个动物类:

//定义了动物类,动物可以做一些事
public abstract class Animal  {
    public void doSomething(){
        //doSomething
    }
}

2、接下来定义一个接口 叫声接口:

public interface GetCry{
    public void cry();
}

3、下面造一个dog类:


public class Dog extends Animal implements GetCry{
    @Override
    public void cry() {
        System.out.println("汪汪汪  汪汪!");
    }
    @Override
    public void doSomething() {
       System.out.println("我是小狗狗,我吃狗粮呀!");
    }
}

4、接着造一个Duck类:

public class Duck extends Animal implements GetCry {
    @Override
    public void cry() {
        System.out.println("嘎嘎嘎 嘎嘎");
    }

    @Override
    public void doSomething() {
        System.out.println("我是小鸭子,我吃鸭饲料呀!");
    }
}

5、最后造一个Fish类:

//注意这里没有实现GetCry接口!!!
public class Fish extends Animal {
    @Override
    public void doSomething() {
        System.out.println("我是小鱼儿,我吃鱼饲料呀!");
    }
}

6、主方法调用:

public class Main {
    public static void main(String[] args) {
        //向上转型
        GetCry dogCry=new Dog();
        GetCry duckCry=new Duck();
        dogCry.cry();
        duckCry.cry();
        //注意,鱼不会叫,所以不能调用cry
        Fish fish=new Fish();
        fish.doSomething();

    }
}

运行结果如下:

7、几点解释说明:

(1):在接口中的方法必须被定义为 public 或者 abstract 形式,其他修饰权限不被java编译器认可,可以不写,但默认public。

(2):在接口中任何字段都是自动是 static 和 final。

(3):只要类中有一个抽象方法,则该类就被标记为抽象类,不能被实例化。

(4):如果抽象类被继承,则要实现所有的抽象方法。可用适配器解决。

(5):何为多态?

              答:上面dogCry ,duckCry  都是GetCry类型的,但是调用cry()方法,得到的结果却不是一样的,有不同的行为!这就是多态。所以多态性离不开“继承”与“向上转型”与重写,首先明白一点,GetCry是一个接口,接口也是可以上转型操作的!!!切记!!!

(6):为何要另外写一个GetCry接口?一起写在Animal里面不好吗?

              答:可以写在Animal里面,我们都知道,一旦继承抽象类就要实现所有抽象方法,但是我的  Fish  类并不需要实现  cry()方法,鱼儿是不会叫的呀!这写在Animal里面,不是强行实现了吗?强迫癌难受啊!所以将可选  行为用 接口实现,并且接口可以多重继承!

若有其他问题欢迎给博主留言哦!一定会回复您的,共同进步,相互探讨!

发布了44 篇原创文章 · 获赞 72 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cj151525/article/details/89438586
今日推荐