对象的多种行态
1.引用多态:
父类的引用可以指向本类的对象
父类的引用可以指向子类的对象
使用多态的时候两个lei必须有个继承关系
public class Animal {
public void speak() {
System.out.println("我是会说话的动物类");
}
}
public class Dog extends Animal {
}
public class ZooTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Animal类是父类.他创建的对象 可以指向本类Animal类也可以指向Dog类
Animal obj1=new Animal();
Animal obj2=new Dog();
//子类的引用不能指向父类
//Dog dog=new Animal(); 错误的写法
//打印输出
System.out.println(obj1.getClass());
System.out.println(obj2.getClass());
}
}
结果:
class Animal
class Dog
2.方法多态:
创建本类的对象时,调用的方法为本类的方法
创建子类对象时,调用的方法为子类重写的方法
建一个动物类
public class Animal {
public void speak() {
// TODO Auto-generated method stub
System.out.println("我是会说话的动物类");
}
}
建一个狗类继承动物类:
public class Dog extends Animal {
public void speak() {
System.out.println("我是说梦话的狗");
}
public void eatSoup() {
System.out.println("狗会喝汤");
}
}
建一个cat猫类
public class Cat extends Animal {
}
建一个测试类:
public class ZooTest { public static void main(String[] args) { //Animal类是父类.他创建的对象 可以指向本类Animal类也可以指向Dog类 Animal obj1=new Animal(); Animal obj2=new Dog(); Animal obj3=new Cat(); //子类的引用不能指向父类 //Dog dog=new Animal(); 错误的写法 //打印输出 obj1.speak();//动物类的方法 obj2.speak();//狗类说话了 obj3.speak();//子类继承父类动物类的说话方法 //此时obj2不能调取 Dog里独有的eatSoup喝汤方法 (父类的引用调用子类的私有方法) } }
打印结果:
我是会说话的动物类 我是说梦话的狗 我是会说话的动物类