您的位置:首页 > 其它

多态的基础知识总结

2016-05-04 23:03 232 查看
多态
1.什么是多态
简单的说可以理解为某一类事物的多种存在形态。

举个例子说一下吧:

class Animal{
String color;
public void eat(){
System.out.println("吃东西")
}
}
class Dog extends Animal{
public void eat(){
System.out.println("边汪汪的叫,边吃东西")//重写

,
//当子类不想用父类中继承的eat()

方法,这时候可以重写eat()方法
}
}

比如说有一个Animal类,一个Dog类,Dog类继承了Animal类,现在我们可

以从两个方面来看Dog,即
可以把它当做Dog,也可以把它当做Animal,所以说现在Dog类可以有两种存在形式

;

2、对象多态的前提(要记住)

A:类与类(或接口)要有继承(或实现)关系。
B:一定要有方法的重写。
C:一定要有父类或者接口的引用指向子类的对象。(Animal a=new Dog

)

3、多态思想:可以指挥同一类型的一批对象做事情。
多态的出现让我们复杂的问题简单化了。

4、多态中成员的特点:

A:成员变量:编译和运行都看父类。

B:非静态方法:编译看父类,运行看子类。(重点,今天考试考到好几

个)
比如:Animal a=new Dog;
a.eat();
这句代码编译的时候首先看父类有没有eat()方法,如

果有这个方法,编译可以通过,如果没有,编译不会通过
运行的时候看子类Dog有没有eat()方法,如果子类有

eat()方法,输出的是子类中的eat()方法,如果没有输出父类Animal
中的eat()方法;

为了更好的说明这一点我就举个今天考的例子吧
class  Base{
void  test( ){
System.out.println(“Base.test()”);
}
}
public  class  Child  extends  Base{
void  test(){
System.out.println(“Child.test()”);
}
public  static  void  main(String[]  a){
Child  child=new Child();
Base   base=new Child();
base.test();
}
}

分析:题目中有两个类,分别是Base类和Child类,并且Child继承了Base

类,并且重写了父类的text()方法
Child  child=new Child();创建子类对象
Base   base=new Child(); 创建子类对象,赋给父类引用型变

量base,满足了多态的三个前提:1.有继承关系;2、子类重写了父类中

的方法;3、父类的引用base 指向子类对象(new Child)

base.test()     编译期间看父类中有test()方法,运

行的时候子类中也有test()方法,所以输出结果一目了然了
当然是Child,test()   (是不是觉得挺简单的,只要记住这些判断步骤,相信下次遇到多态就不会出错了)

C:静态方法:编译和运行都看父类。

补充一点吧:如果子类中有自己的特有方法,如果你想调用特有方法,这

时候你就必须要向下转型了!话不多说还是看一下代码吧

class Animal{
String color;
public void eat(){
System.out.println("吃东西")
}
}
class Dog extends Animal{
public void eat(){
System.out.println("边汪汪的叫,边吃东西


“)//重写,

//当子类不想用父类中继承的eat()

方法,这时候可以重写eat()方法

public void yaoRen(){
System.out.println("我可以咬人哦")
}
}
}

Animal a=new Dog()  主函数中有这一句

代码,看到我们就想到了多态,现在我们的需求是

想调用Dog中yaoRen()这个方法,并且这个方法是子类Dog特有的方法
我们该如何调用它呢,这时候我们就不能把Dog当做Animal看待了,要把a强行转成Dog所以代码就要写成

Dog g=(Dog)a; g.yaoRen(),输出结果一目了然
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: