1.多态的概述
多态指的是对象,即对象既有自己的形态,也有其父类的形态。
2.多态的格式和使用(Day111104.Demo01)
Demo01Multi.java
package Demo01;
/*
* 代码中体现多态性,其实就是一句话:父类引用指向子类对象。
* 这就体现了多态的特点,一只猫被当作动物来对待
* 格式:
* 父类名称 对象名 = new 子类名称();
* 或者
* 接口名称 对象名 = new 实现类名称();
* */
public class Demo01Multi {
public static void main(String[] args) {
//使用多态的写法,左侧父类的引用指向了右侧子类的对象。
Fu ha = new Zi();
ha.method();//子类方法(右边new的是谁,就是谁的)
ha.methodFu();//父类特有方法(子类没有便向上找父)
}
}
Fu.java
package Demo01;
public class Fu {
public void method() {
System.out.println("父类方法");
}
public void methodFu() {
System.out.println("父类特有方法");
}
}
Zi.java
package Demo01;
public class Zi extends Fu{
@Override
public void method() {
System.out.println("子类方法");
}
}
3.多态中成员变量的使用特点(Day111104.Demo02)
Demo02MultiField.java
package Demo02;
/*
* 访问成员变量的两种方式:
* 1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找
* 2.间接通过成员方法访问:看该方法属于谁,优先用谁,没有则向上找
* */
public class Demo02MultiField {
public static void main(String[] args) {
//使用多态的写法,父类引用指向子类对象
Fu obj = new Zi();
//成员变量是不能进行覆盖重写的
System.out.println(obj.num);//父的10
//System.out.println(obj.numZi);
//2.间接通过成员方法访问
obj.showNum();//父:10,子类没有覆盖重写时候;子:20,子类进行覆盖重写时候
}
}
Fu.java
package Demo02;
public class Fu {
int num = 10;
public void showNum() {
System.out.println(num);
}
}
Zi.java
package Demo02;
public class Zi extends Fu{
int num = 20;
int numZi = 30;
@Override
public void showNum() {
System.out.println(num);
}
}
4.多态中成员方法的使用特点
Fu.java
package Demo02;
public class Fu {
int num = 10;
public void showNum() {
System.out.println(num);
}
public void method() {
System.out.println("父类方法");
}
public void methodFu() {
System.out.println("父类特有方法");
}
}
Zi.java
package Demo02;
public class Zi extends Fu{
int num = 20;
int numZi = 30;
@Override
public void showNum() {
System.out.println(num);
}
@Override
public void method() {
System.out.println("子类重写父类的方法");
}
public void methodZi() {
System.out.println("子类特有方法");
}
}
Demo02MultiMethod.java
package Demo02;
/*
* 在多态代码中,成员方法的访问规则是:
* 1.看new的是谁,就优先用谁,没有则向上找。
*
* 口诀:编译看左边,运行看右边。
*
* 对比:
* 成员变量:编译看左边,运行还看左边。
* 成员方法:编译看左边,运行看右边。
* */
public class Demo02MultiMethod {
public static void main(String[] args) {
Fu ha = new Zi();
ha.method();//子类重写父类的方法(父子都有,优先用子)
ha.methodFu();//父类特有方法(子类没有,父类有,则向上找到父)
//编译看左边,左边是Fu,Fu当中没有methodZi方法,所以编译报错。
//Fu.methodZi();//错误写法
}
}
5.使用多态的好处
左边的代码一直都是不变的,让代码更加灵活统一。多态其实就是从老板的角度来看的,我不管你怎么做,我只要你工作就行。