多态的概述
-
什么是多态
同一个对象在不同时刻表现出的不同时态 -
多态的前提
要有继承或实现关系
有方法的重写
有父类引用指向子类对象
多态的访问特点
class Animal{
int a=10;
public void eat(){
System.out.println("动物");
}
}
class cat extends Animal{
int a=54;
int b=89;
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃翔");
}
}
public class tes01 {
/*
测试多态时调用成员,是调用父类的还是子类的?
测试多态时调用方法,是调用父类的还是子类的?
*/
public static void main(String[] args) {
Animal a=new cat();
//调用成员
System.out.println(a.a);
a.eat();
}
}
输出结果
由此可得
- 成员变量
编译时看父类,运行时看父类
- 成员方法
编译时看父类,运行是看子类
多态的转型
package Day02.多态;
class Animal{
int a=10;
public void eat(){
System.out.println("动物");
}
}
class cat extends Animal{
int a=54;
int b=89;
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
class Dog extends Animal{
@Override
public void eat() {
System.out.println("狗吃翔");
}
}
public class tes01 {
/*
测试类
*/
public static void main(String[] args) {
//向下转型
Animal a=new cat();
//向下转型
cat b=(cat)a;
a.eat();
}
}