Java的多态
多态规则(前提): 一种事物的多种形态
1. 类与类之间 要产生联系 继承关系
2. 要有方法的重写(没有方法的重写 多态的意义不大)
3. 核心: 父类引用(指针)指向子类空间(声明方式)
public static void main(String[] args) {
Animal a1 = new Cat();
a1.speak();
Animal a2 = new Dog();
a2.speak();
}
}
class Animal{
String name;
String kind;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public void speak() {
System.out.println("我是动物叫出声");
}
@Override
public String toString() {
return "姓名: " + name + " 种类: "+ kind;
}
}
class Dog extends Animal{
@Override
public void speak() {
System.out.println(" 汪汪汪 ");
}
}
class Cat extends Animal{
@Override
public void speak() {
System.out.println(" 喵喵喵 ");
}
}
多态时 调用成员变量 和 调用成员方法
在内存中的表现
多态 调用成员变量 时
简单记 编译和运行 都看等号 左边
当使用父类引用 指向子类空间的时候
父类 的引用 只能访问到
子类空间中 属于 父类的那部分(super 访问的部分)
当本类引用 指向本类空间的时候
本类的引用 可以访问到 整个空间
public static void main(String[] args) {
Father father = new Son();
father.print();
}
class Father{
int num = 10;
public void print() {
System.out.println("我是 Father 类 的 print 方法");
}
}
class Son extends Father{
int num = 20;
public void print() {
System.out.println("我是 Son 类 的 print 方法");
}
}
多态的弊端:
使用多态声明对象的时候 无法直接调用子类的特有方法
只能通过向下转型后 才能使用子类特有的方法
多态的好处:
1. 代码维护性强(这条建立在 继承的基础上)
2. 方法的扩展性强(核心好处)