多态的前提
- 有子父类的继承关系(或者接口中的实现关系)
- 有方法的重写
- 父类的引用指向子类的对象(或者接口中的引用指向实现类中的对象)
多态的含义:
对象的多态性:同一个物体,可以有多个名称;java中,同一个对象,可以有不同类型的引用指向这个对象。本质:同一个事物,有多种称谓和描述
引用的多态性:同一个名称,可以表达多种物体;java中,同一个引用,可以指向不同的子类对象。本质:同一个描述和称谓,可以表达不同种类的事物
代码示例:基于接口
package com.pack.polymophic;
public class Fu {
public static void main(String[] args) {
Animal animal = new Cat();
animal.cry();//maoku
System.out.println(animal.name);//dongwu
//向上转型
Cat cat = (Cat) animal;
System.out.println(cat.name);//mao
System.out.println(cat.i);
}
}
class Animal{
static final String name = "dongwu";
final int i = 10;
public void cry(){
System.out.println("动物哭");
}
}
class Cat extends Animal{
//String name = "mao";
// @Override 2子类可以继承父类的静态方法,但静态方法不能再子类重写
public void cry(){
System.out.println("mao哭");
}
public void jump(){
System.out.println("跳");
}
}
基于继承:
package com.pack.polymophic;
public class Fu {
public static void main(String[] args) {
Animal animal = new Cat();
animal.cry();//maoku
System.out.println(animal.name);//dongwu
//向上转型
Cat cat = (Cat) animal;
System.out.println(cat.name);//mao
System.out.println(cat.i);
}
}
class Animal{
static final String name = "dongwu";
final int i = 10;
public void cry(){
System.out.println("动物哭");
}
}
class Cat extends Animal{
//String name = "mao";
// @Override 2子类可以继承父类的静态方法,但静态方法不能再子类重写
public void cry(){
System.out.println("mao哭");
}
public void jump(){
System.out.println("跳");
}
}
多态中的静态方法访问注意事项:
- 编译看=左边,运行看=左边;
package com.pack.polymophic; public class Demo05 { public static void main(String[] args) { Animal1 animal1 = new Dog(); animal1.getName(); Animal1 a = null; a.getName(); Animal1.getName(); Dog.getName(); } } class Animal1{ public static void getName(){ System.out.println("父类的静态方法"); } } class Dog extends Animal1{ public static void getName(){ System.out.println("子类中的静态方法"); } }
运行结果:
父类的静态方法 父类的静态方法 父类的静态方法 子类中的静态方法 Process finished with exit code 0
总结;
- 静态变量:加上static关键字的变量,可以不随着对象的变化而变化
- 静态变量相对于当前类型,总是不变,有固定的值;
- 非静态变量相对于当前类型,会发生变化
- 静态方法:加上static关键字的方法,不会随着子类对象的不同,而运行不同内容
- 相对于顶层父类,总是不变
- 非静态方法相对于顶层父类,可以发生变化
- 静态与多态无关