java-多态

浪子不回头ぞ 提交于 2019-12-02 02:46:50

一句话:父类引用指向子类对象

格式: 父类名称 对象名 = new 子类名称()
或者
接口名称 对象名 = new 实现类名称()

public class Fu {
    public void main() {
        System.out.println("父类方法");
    }
    public void mainTest() {
        System.out.println("父类特殊方法");
    }
}

public class Zi extends Fu{
    @Override
    public void main() {
        System.out.println("子类方法");
    }
}

public class Mulituplate {
    public static void main(String[] args) {
        Fu objFu = new Zi();
        objFu.main();
        objFu.mainTest();
    }
}

访问成员变量:
直接通过对象名称访问成员变量,谁是对象,优先使用谁,没有则向上找。
间接通过方法访问成员变量,方法属于谁,则优先使用谁,没有则向上找。
重写了父类方法,就是50,不重写就是20。

public class Fu {
    
    int num = 20;
    
    public void main() {
        System.out.println("父类方法");
    }
    public void mainTest() {
        System.out.println("父类特殊方法");
    }
}

public class Zi extends Fu{
    int num = 50;
    @Override
    public void main() {
        System.out.println("子类方法");
    }
}


//调用
public class Mulituplate {
    public static void main(String[] args) {
        Fu obj = new Zi();
        obj.main();
        obj.mainTest();
        System.out.println(obj.num); // 20

    }
}

访问成员方法:
看new的是谁,就优先用谁,没有则向上找。但是无法访问子类特有的成员。

使用多态的好处:使左边的代码更加简单。无需修改

对象的向上转型:(多态)

父类引用指向子类对象。

对象的向下转型:
向上转型是安全的,但是无法访问子类特有的成员方法

对象的向下转型一定要进行类型instanceof判断

if (obj instanceof Fu) {
            Zi zi = (Zi)obj;
            zi.mianZi();
        }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!