1:多态的介绍
/** * 多态性:一个对象拥有多种形态(如:既是学生,也是人类),这就是对象的多态性. * * 代码中体现多态性:父类引用指向子类对象. * 格式: * 父类名称 对象名称 = new 子类名称(); * 或者: * 接口名称 对象名称 = new 实现类名称(); */ public class polymorphism001 { public static void main(String[] args) { FuMr jj = new ZiMr();//父类引用指向子类对象. jj.mortyOne();//调用子类的方法. jj.mortyTow();//子类没有向上找父类,因为继承了父类的方法. } } class FuMr{ public void mortyOne(){ System.out.println("父类方法"); } public void mortyTow(){ System.out.println("父类特有方法");//不让子类覆盖重写也能调用,会继承下去. } } class ZiMr extends FuMr{ @Override public void mortyOne(){ super.mortyOne();//调用父类的方法. System.out.println("子类方法");//父类方法的覆盖重写. } }
2:多态中的成员变量
/** * 1:成员变量不能进行覆盖重写. * * 访问成员变量的两种方式: * 1:直接通过对象名称访问成员变量:等号左边是谁优先用谁,没有就向上找. * 2:简介通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有就向上找. */ /** * 多态的成员方法使用规则: * 1:看new的谁就优先用谁,如果没有就向上找. * 成员方法口诀: * 编译看左边,运行看右边(就是如果只有子类拥有就不能运行,要父子都拥有.运行的时候运行右边的成员方法); * 成员变量口诀: * 编译看左边,运行看左边. */ public class polymorphism002 { public static void main(String[] args) { FuMc mm = new ZiMc();//父类引用指向子类对象. System.out.println(mm.mun1);//左边是父类,优先用父类的成员变量. mm.showOne();/** *子类没有进行覆盖重写,所以这个调用的就是父类里面的方法. *子类如果进行覆盖重写,那么这个就是调用子类的方法. */ mm.showTow();//父子都有,优先用子类. mm.showThr();//子类没有,向上找父类. //mm.showFor();父类没有,不能进行编译,编译失败. } } class FuMc{ int mun1 = 10; public void showOne(){ System.out.println(mun1); } public void showTow(){ System.out.println("父类的方法"); } public void showThr(){ System.out.println("父类特有的方法"); } } class ZiMc extends FuMc{ int mun1 = 20; public void showTow(){ System.out.println("覆盖重写父类的方法"); } public void showFor(){ System.out.println("子类特有的方法"); } }