【零基础学Java】—多态(二十六)
一、多态的概述
- 面向对象的三大特性:封装性、继承性、多态性
 extends继承或者implements实现,是多态性的前提

一个对象拥有多种形态,这就是对象的多态性

二、多态的格式与使用
代码当中体现多态性,其实就是一句话:父类引用指向子类对象
  格式:  父类名称 对象名=new 子类名称();
  
  或者:  接口名称 对象名=new 实现类名();
 
public class Fu {
    public void method(){
        System.out.println("父类方法");
    }
    public void methodFu(){
        System.out.println(" 父类方法特有的");
    }
}
 
public class Zi extends Fu {
    @Override
    public void method(){
        System.out.println("子类方法");
    }
}
 
public class demoMulti {
    public static void main(String[] args) {
        //使用多态的写法
        //左侧父类的引用 指向了右侧子类的对象
        Fu obj=new Zi();
        obj.method();//子类方法
        obj.methodFu();//父类方法特有的
    }
}
 

三、多态中使用成员方法的特点
public class Fuu /*extends Object*/ {
    int num=10;
    public  void showNum(){
        System.out.println(num);
    }
}
 
public class Zii extends  Fuu{
    int num=20;
    int age=20;
    @Override
    public void showNum(){
        System.out.println(num);
    }
}
 
/**
 * @author :CaiCai
 * @date : 2022/4/10 17:03
 */
/*
访问成员变量的方式:
直接通过对象名访问成员变量,看等号的左边是谁,没有则向上找
间接通过成员方法访问成员变量,看该方法属于谁,优先使用谁,没有就向上找
 */
public class demoMultiFiled {
    public static void main(String[] args) {
        // 使用多态的写法:  左父右子
        Fuu obj=new Zii();
        System.out.println(obj.num);//10
        //System.out.println(obj.age);//错误写法
       // obj.showNum();//10 子类没有覆盖重写就是父::10
        obj.showNum();//20 子类如果覆盖重写就是子:20
    }
}
 
在多态的代码当中,成员方法的访问规则是:看new的是谁,就优先使用谁,没有则向上找
口诀:
 成员变量:编译看左边,运行还看左边
 成员方法:编译看左,运行看右
 */
public class Fuu /*extends Object*/ {
    int num=10;
    public  void showNum(){
        System.out.println(num);
    }
    public void method(){
        System.out.println("父类方法");
    }
    public void methodFu(){
        System.out.println("父类特有方法 ");
    }
}
 
public class Zii extends  Fuu{
    int num=20;
    int age=20;
    @Override
    public void showNum(){
        System.out.println(num);
    }
    @Override
    public void method(){
        System.out.println("子类方法");
    }
    public void methodZii(){
        System.out.println("子类特有方法");
    }
}
 
/*
口诀:
成员变量:编译看左边,运行还看左边
成员方法:编译看左,运行看右
 */
public class demo02MultiFiled {
    public static void main(String[] args) {
        Fuu obj=new Zii();
        obj.method();//子类方法(父子都有,优先使用子)
        obj.methodFu();//父类特有方法(子类没有,父类有,向上找到父类)
    }
}
 

四、使用多态的好处

 










