1、多态
1.1、特点:
多态的前提:继承+重写
父类引用 指向 子类对象 ; Animal a1=new Cat();
看的是方法,编译看左边,运行看右边
编译:看左边父类中是否有这个方法,决定程序是否报错
运行:输出的结果看右边子类重写的方法
看的是方法的多态性,其他成员变量和静态修饰的方法输出的结果都是父类的;
1.2、 练习:多态入门案例
package cn.tedu.oop;
/* 本类用作多态的入门案例
总结一句话:多态看的是方法,编译看左边,运行看右边
* */
public class TestDemo {
public static void main(String[] args) {
Animal animal = new Animal();
animal.eat();
Cat cat = new Cat();
Dog dog = new Dog();
cat.eat();
dog.eat();
/*2.多态的创建
口诀1:父类引用 指向 子类对象
口诀2:编译看左边,运行看右边
* */
Animal a1=new Cat();
Animal a2=new Dog();
a1.eat();
a2.eat();
/*3.多态的出现是为了统一调用标准,相父类看齐
* 父类中定义了的功能才能用,子类的特有功能用不了*/
// a1.jump();
// a2.run();
/*4.多态中,成员变量使用的是父类;
方法定义使用的是父类的,方法实现使用的是子类的(编译看左边,运行看右边)*/
System.out.println(a1.sum);
/*多态中,静态方法使用的都是自己的,因为静态就不存在重写的概念,静态出现优先于对象,这里a2被看做Animal类*/
a2.play();
}
}
/*1.多态的前提:继承+重写*/
class Animal{
int sum=10;
public void eat(){
System.out.println("小动物吃啥都行~");
}
public static void play(){
System.out.println("小动物玩啥都行");
}
}
class Cat extends Animal{
int sum=100;
@Override
public void eat(){
System.out.println("小猫爱吃小饼干~");
}
public void jump(){
System.out.println("小猫跳得老高了~");
}
}
class Dog extends Animal{
@Override
public void eat(){
System.out.println("小狗爱吃骨头~");
}
public void run(){
System.out.println("小狗跑得老快啦~");
}
// @Override 这里不是重写
public static void play(){
System.out.println("小狗爱打滚");
}
}