多态的前提和体现
有继承、实现关系
有方法重写
有父类引用指向子类对象
父类指向子类
父类引用指向子类时,声明的对象类型还是父类,父类中没有的变量不可访问
成员变量:父类引用指向子类,编译看左边,运行也看左边
成员方法:父类引用指向子类,编译看左边,运行也看右边
原因:成员方法有重写,成员变量没有重写
转型
抽象类
在java中,一个没有方法体的方法应该定义为抽象方法,二类中如果有抽象方法,该类必须定义为抽象类
Animal类
package com.chouxiang;
/**
* 抽象类
* 不能声明抽象类的对象
* 抽象类中可以有非抽象方法,也可以没有抽象方法
* 父类中的抽象方法,子类必须重写或者该子类为抽象类
* 抽象类可以有构造方法,作用是用于子类访问父类数据的初始化.
*
*/
public abstract class Animal {
private int age = 20;
private final String name = "动物";
public Animal(){}
public Animal(int age){
this.age = age;
}
public abstract void eat();
// public void snip(){}
public void show(){
age = 40;
System.out.println(age);
// name = "zhu";//常量不能修改
System.out.println(name);
}
}
Cat类
package com.chouxiang;
public class Cat extends Animal{
@Override
public void eat(){
System.out.println("猫吃鱼");
}
}
demo测试类
package com.chouxiang;
public class demo {
public static void main(String[] args) {
// Animal a = new Animal();//报错
Animal animal = new Cat();
animal.eat();
}
}
接口
接口是一种公共的规范标准