一:多态的定义:
一个对象有多种形态 就称为多态
package 面向对象.多态.A;
class Animal {
void eat()
{
System.out.println("动物吃东西!");
}
}
class Dog extends Animal{
void eat()
{
System.out.println("狗吃骨头!");
}
}
class Cat extends Animal{
void eat()
{
System.out.print("猫吃鱼!");
}
}
public class Test {
public static void main(String[] args) {
//狗是动物类
//一个对象有多种形态 就称为多态
//一个表示自己的类,一个表示自己父类的类型
//子类对象赋值给父类类型
//运行时,表现得是子类的特征(先去找子类)
//Animal dog = new Dog();
Dog dog = new Dog();
dog.eat();
//Animal cat = new Cat();
Cat cat= new Cat();
cat.eat();
System.out.println(cat.getClass());
/***
* 子类对象赋值给父类类型
* 运行时,表现的是子类的特征(先去找子类)
*/
}
}
二、多态的好处
class Person{
/***
* 如果动物的种类很多,要写很多动物的eat方法;如果直接定义动物类,减少代码的复用。
* @param dog
*/
void feedDog(Dog dog) {
dog.eat();
}
void feedCat(Cat cat) {
cat.eat();
}
void feedAnimal(Animal anim)
{
anim.eat();
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Person per = new Person();
// per.feedDog(dog);
// per.feedCat(cat);
per.feedAnimal(dog);
per.feedAnimal(cat);
}
}
void feedAnimal(Animal anim)
{
anim.eat();
//类的强制类型转换,把父类对象赋值给子类类型
// instanceof : 判断一个类是否是指定的类,如果是,返回true;不是,就返回 false
if(anim instanceof Dog) {
Dog dog = (Dog)anim;
dog.doWork();
}else if(anim instanceof Cat)
{
Cat cat = (Cat)anim;
cat.doWork();
}
}
三、注意: 字段不存在多态
public class Test2 {
public static void main(String[] args) {
//本类对象实例化
// subclass sub = new subclass();
// 把子类对象赋值给父类类型
SuperClass sub = new subclass();
sub.mych();
//字段不存在多态,注意调用的还是父类的成员变量。在编译的时候就已经确定要调用谁
System.out.println(sub.name);
}
来源:CSDN
作者:weixin_40876986
链接:https://blog.csdn.net/weixin_40876986/article/details/104176477