您的位置:首页 > 编程语言 > Java开发

Java中的多态

2016-01-22 17:24 162 查看
public class test {
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.num);
f.print();
}
}

class Father{
int num=10;
public void print(){
System.out.println("Father");
}
}

class Son extends Father{
int num=20;
public void print(){
System.out.println("Son");
}
}




多态也叫作动态绑定。

对于成员变量:

编译、运行看的都是父类。

对于非静态的成员方法:

环境执行程序要经过编译、运行;成员方法在编译的时候到父类中找print( ),在运行的时候到子类中找print(
)【编译看的是父类,运行看的是子类】。

对于静态的成员方法:

因为是静态的,相当于是用类名去调用,故编译、运行都看父类的。

并且对于非静态成员方法,如果print( )只存在于子类中,在父类中没有print( )的话,编译的时候就会出错,故不会运行。

父类引用指向子类对象是向上转型

先有向上转型,然后才有向下转型

多态的好处和弊端:

1、好处:提高了代码的维护性(是由继承保证的)

package pro5;

public class test {
public static void main(String[] args) {
//Animal a = new Dog();在实际开发中很少这样用,用下面的方式可以使用子类中的特定属性和行为
meth(new Cat());
meth(new Dog());
}

public static void meth(Animal a){ //当作参数的时候用多态最好,因为扩展性强
//关键字instanceof用来判断前边的引用是否和后面的数据类型相等
if(a instanceof Cat){
Cat c1 =(Cat)a;
c1.print();
c1.eat();
}else if(a instanceof Dog){
Dog d1 =(Dog) a;
d1.print();
d1.eat();
}else{
a.print();
}
}
}

class Animal{
public void print(){
System.out.println("Animal");
}
}

class Cat extends Animal{
public void print(){
System.out.println("Cat");
}
public void eat(){
System.out.println("Cat Eat");
}
}

class Dog extends Animal{
public void print(){
System.out.println("Dog");
}
public void eat(){
System.out.println("Dog Eat");
}
}


2、弊端:不能够使用子类特有的属性和行为。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: