Java中多态的理解
Posted chenzhe1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中多态的理解相关的知识,希望对你有一定的参考价值。
最近学习Java里面的多态下面是个人的整理:
多态存在的3个必要条件:
1.要有继承
2.要有方法的重写
3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接)
对于多态,可以总结它为:
一、使用父类类型的引用指向子类的对象;
二、该引用只能调用父类中定义的方法和变量;
三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
五、如果继承的子类继承父类的的一个方法后加以重载,则该父类的引用不能使用重载之后的那个方法。
public class Textduotai { public static void main(String[] args) { // TODO Auto-generated method stub
/*这时多态就很好的体现了,你想给你的宠物喂食,只需要添加相对应动物类,和食物类的子类,比如你有养了一只乌龟,只需要写一个乌龟类让他继承动物类,和它相对应的food
*说话,你想喂鱼给你的猫吃就只需要调用feed方法,结果你的猫吃到了鱼:程序输出我叫小白,我喜欢吃鱼,
*/ Master master = new Master(); master.feedFood(new Cat(), new Fish()); } }
//定义动物类,动物有两个成员属性name和age class Animal{ String name; int age; //成员变量的访问器和修改器即get和set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }
//定义动物两个方法动物都会叫 public void animalcay(){ System.out.println(); }
//动物都要吃东西 public void eat(){ System.out.println(); } }
//定义猫类并且让猫类继承动物类 class Cat extends Animal{ String name; int age; public Cat(){ System.out.println("小白"); }
//父类方法的重写 public void animalcay(){ System.out.println(" 喵喵叫"); } public void eat(){ System.out.print("I like fish"); } } //定义狗类,并且让狗类继承动物类的方法 class Dog extends Animal{ String name; int age; public Dog(){ System.out.println("我叫小黑"); }
//夫类方法的重写 public void animalcay(){ System.out.println(" 旺旺叫"); } public void eat(){ System.out.print("我喜欢吃骨头"); } } //定义食物类 class Food{ String name;
public void showName(){ System.out.println(); } } class Fish extends Food{ String name;
//重写父类方法 public void showName(){ System.out.println("我喜欢吃鱼"); } } class Bone extends Food{ String name;
//重写父类方法
public void showName(){
System.out.println("骨头");
}
}
//定义主人类,比如要给动物喂食 class Master { String name ; public Master(){ } public Master(String name){ this.name = name; } public void feedFood(Animal an,Food food){ System.out.print(name+" "); an.eat(); System.out.println("最喜欢食物:"); food.showName(); } }
在上面代码中我们要实现主人给动物喂食物,我们定义动物类,猫类和狗类都继承于动物类,定义了食物类,和它的两个子类鱼和骨头,在上面我们可以看出多态就是同一引用或者类型多种引用就叫多态
以上是关于Java中多态的理解的主要内容,如果未能解决你的问题,请参考以下文章