JAVA基础:多态

来源:互联网 发布:引导弹升级数据 编辑:程序博客网 时间:2024/06/08 06:26

多态
定义:一种事物的多种形态
以笔类为例:
铅笔、钢笔、毛笔。。。。。。
多态的规则:
1、类与类之间要建立关系,建立继承的关系;
2、必须要有方法的重写;
3、父类的指针(引用)指向子类的对象;

需求:创建 动物类、猫类、狗类
都有一个吃的方法 动物类 动物吃饭
猫 猫吃鱼
狗 狗吃骨头

public class Demo01 {

public static void main(String[] args) {    Cat c = new Cat();    c.eat();    Animal a = new Cat();    a.eat();    Animal aDog = new Dog();    aDog.eat();}

}
class Animal{
public void eat(){
System.out.println();
}
}
class Cat extends Animal{
public void eat() {
System.out.println(“猫吃鱼”);
}
}

class Dog extends Animal{
public void eat() {
System.out.println(“够吃骨头”);
}

}
多态时 成员变量是如何调用的:

多态时当父类引用成员变量时
编译 需要看父类中有没有这个成员变量 没有编译不会通过
运行 访问就是父类中的成员变量
多态时 父类访问成员变量 编译 和 运行(看父类)

多态时 如何访问成员方法?在内存如何表现?
多态调用成员方法时
编译时 看父类中有没有这个方法 没有就报错
运行时 运行时 运行子类这个方法
所以:编译时看父类
运行时也看父类

成员变量运行时全看父类

public class Demo02 {

public static void main(String[] args) {    Father f = new Son();    f.speak();    System.out.println(f.num);    Son s = new Son();    System.out.println(s.num);}

}
class Father{

int num = 10;public void speak() {    System.out.println("Father 说");}

}
class Son extends Father{
int num = 20;
public void speak() {
System.out.println(“son 说”);
}
}

多态:
好处:
1、增强了代码可维护性(建立在继承基础上)
2、增强代方法的可扩展性(核心)
弊端:不能直接调用子类的特殊(不是重写父类的)方法
ublic class Demo03 {

public static void main(String[] args) {    Person p = new Pianzi();    p.speak();    Pianzi pianzi = (Pianzi)p;    pianzi.hit();}

}
class Person{

public void speak() {    System.out.println("聊天 侃大山");}public void hit() {    System.out.println("锤你");}

}

class People extends Person{

}

class Pianzi extends Person{
public void speak() {
System.out.println(“洗脑”);
}
public void hit() {
System.out.println(“锤你—杀人防火”);
}
}