目录
1. 多态的注意事项和细节讨论
2. 新建对象类
3. 测试类
4. 测试结果
1. 多态的注意事项和细节讨论
多态的前提是: 两个对象(类)存在继承关系
多态的向上转型。
1. 本质: 父类的引用指向了子类的对象。
2.语法: 父类类型 引用名 = new 子类类型();
3. 特点:
3.1 编译类型看左边,运行类型看右边。
3.2 可以调用父类类型所有的成员 (需要遵循访问权限), 不能调用子类中特有成员。
3.2.1 能不能调用某方法是有程序运行的编译类型决定的,如果编译类型里没有该方法则不能调用
3.3 最终运行效果看子类的表现。即调用方法从运行类型(子类)开始查找方法。然后调用。
2. 新建对象类新建Animal类
package org.example.poly_.details_;
public class Animal {
String name = "动物";
int age = 10;
public void sleep(){
System.out.println("睡觉");
}
public void run(){
System.out.println("跑步");
}
public void eat(){
System.out.println("吃饭");
}
public void show(){
System.out.println("hello, 你好");
}
}
新建Cat类
package org.example.poly_.details_;
public class Cat extends Animal{
@Override
public void eat(){
System.out.println("猫吃鱼");
}
public void catchMouse(){//cat特有的方法,猫抓老鼠
System.out.println("猫抓老鼠");
}
}
3. 测试类
catchMouse方法不能调用,因为该方法在编译类型Animal里面没有。我们调用方法是看编译类型,如果编译类型里面有该方法才可以调用。
package org.example.poly_.details_;
public class PolyDetails {
public static void main(String[] args) {
//向上转型 : 父类的引用指向了子类的对象
//语法 : 父类类型 引用名 = new 子类类型();
Animal animal = new Cat();
animal.eat();
animal.run();
animal.sleep();
animal.show();
}
}
4. 测试结果
猫吃鱼
跑步
睡觉
hello, 你好
在eat方法中是调用了Cat类的eat方法,这是为什么呢。
编译的时候是由编译类型javac决定的,但是运行的时候时是java执行子类的方法eat,所以调用了我们的子类eat方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)