关于java中的多态和对实例化对象的一些理解

科技资讯 投稿 10800 0 评论

关于java中的多态和对实例化对象的一些理解

1、首先是继承和重写。这个很简单。因为多态就是建立在不同的重写之上的。也就是说多态就是在使用着一个方法的不同重写。而重写又是依赖着继承关系。

首先先上代码示例。

public class Animal { public void Shout({ System.out.println("叫叫叫"; } public void Hi({ System.out.println("打招呼"; } } class Dog extends Animal{ public void Shout({ System.out.println("汪汪汪"; } public void seeHouse({ System.out.println("看家"; } }class Cat extends Animal{ public void Shout({ System.out.println("喵喵喵"; } } class goose extends Animal{ public void Shout({ System.out.println("嘎嘎嘎"; } }

 

public class TestPolym {
    public static void main(String[] args {
        AnimalShout(new Dog(;
        AnimalShout(new goose(;
    }
    static void AnimalShout(Animal animal{
        animal.Shout(;
    }
}

在如上代码中,Animal类是作为dog、cat、goose的父类。而TestPolym则是用于实现多态

指向子类对象则是看这一行: 

这里其实可以理解为:

其实这一行打出来基本就可以理解个七七八八。这句话就是定义了一个对象 animal 然后将其实例化成 类型为 Animal 的Dog()。因为Dog、Cat这些是Animal的子类,所以类型 Animal >= Dog、Cat......这些子类。所以首先指向子类是成立的。

反之,使用此语句去运行不是由Animal类中的方法重写而来的方法时,此语句会报错。例如用这一行去调用seeHouse时

 编译器会红,并且建议你在Animal中创建这样一个方法,那我们去创建一下。之后就会发现,Animal和Dog两个类中都有Hi方法了,又变成重写了!而且程序也能跑的通了。所以本质上还是Animal类包含(抽象一点的)Dog类。


编程笔记 » 关于java中的多态和对实例化对象的一些理解

赞同 (55) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽