面对对象-多态
2018-11-02 本文已影响2人
我叫吴智斌
多态思想和特点
//狗是动物类
//一个对象有多种形态
//一个表示自己的类,一个表示自己父类的类型
//子类对象赋值给父类类型
//多态运行时还是自己new出来的对象本身类
Animal dog =new Dog();
dog.eat();
//子类对象赋值给父类类型
//运行时,表现的是子类的特征(先去找子类)
System.out.println(dog.getClass());//class _06面向对象.多态.Dog
eclipse快捷键
ctrl + + 放大屏幕
ctrl + - 缩小屏幕
多态的好处
instanceof关键字(懵逼)
class Animal {
void eat() {
System.out.println("动物吃东西");
}
}
class Dog extends Animal {
void eat() {
System.out.println("狗吃骨头");
}
void dowork() {
System.out.println("汪汪汪");
}
}
class Person{
void feedAnimal(Animal anim) {//传入类型为Animal anim
System.out.println(anim.getClass());//得到真实类型
anim.eat();
if(anim instanceof Dog) {//判断传入的 anim 是否为Dog
Dog dog = (Dog)anim; //因为 Dog 类是Animal的子类,传进来的时候,Dog dog不能接收父类的参数值,只能用强制类型转换来接收
dog.dowork();
}else if(anim instanceof Cat) {
Cat as = (Cat)anim;
as.watch();
}
}
}
Animal dog = new Dog();
类的强制类型转换:把父类对象赋值给子类类型
instanceof:判断一个对象是否是指定的类,如果是 返回 true 不是的话返回false
Dog dog = (Dog)anim;
dog.dowork();
多态中字段注意点
字段不存在多态
字段前面对象是什么类型,就调用谁的.在编译的时候,就已经确定了要去调用谁的
class SuperClass {
String name = "sup-myxq";
void myxq() {
System.out.println("super的myxq");
}
}
class SubClass extends SuperClass {
String name = "sub-myxq";
void myxq() {
System.out.println("sub的myxq");
}
}
SuperClass sub = new SubClass();
System.out.println(sub.name);//调用的时候并不是表现出多态的特征,表现出的是super的特征
//打印出来的是sup-myxq