extends

  1. 方法的执行

方法的执行

父类声明的类只会执行,实例重现父类的方法,父类和基类拥有的方法。
重写:方法名和参数名完全相同,反回结果与不大于父类视为重写,参数有继承关系也不是重写。
方法同名,子类参数作用域小于父类(不美好的方法,抵制出现)会出现以假乱真,子类实例被父类声明后,调不到子类实例的方法,消失了
例:药房拿药,大人吃2片,小孩吃1片,小孩替大人去拿药会拿到2片大人的药量
允许出现的情况
例:大人小孩玩小孩游戏,小孩可以和大人玩,也可以和小孩玩,大人只和小孩玩,子类参数大于父类参数

重写:方法名和参数名完全相同视为重写,会执行子类方法。参数若有继承,也不算是重写,子类参数作用域缩小时只有子类句柄调用才可执行。重写的方法返回结果可以缩小,放大会报错(同名,同种参数)

package basic.test;

/**
 * Created by MSI-PC on 2018/5/14.
 */
class RootMan{
    public void supper(){
        System.out.println("super");
    }
    //和小孩玩游戏
    public Child playChildGame(Child child){
        System.out.println("super_game_child");
        return null;
    }
    //获取药量
    public Parent getDrug(RootMan parent){
        System.out.println("root_6片药");
        return null;
    }
    public RootMan talk(Parent parent){
        System.out.println("parent_"+this.getClass());
        return null;
    }
}
abstract class Parent extends  RootMan{
    public Parent() {
        System.out.println("parent");
    }
    //@Override 报错 不是重写
    public RootMan getDrug(Parent parent){
        System.out.println("parent_4片药");
        return null;
    }
    @Override
    public Parent talk(Parent parent){
        System.out.println("parent_"+this.getClass());
        return null;
    }
    public Child talkParaSmall(Child parent){
        System.out.println("test_child"+this.getClass());
        return null;
    }
}
public class Child extends Parent {
    Child(){
        System.out.println("child");
    }

    //@Override 不是重写加此标识会报错 只有自己类的句柄会调用
    public RootMan getDrug(Child child){
        System.out.println("test_child:1片药");
        return null;
    }
    //@Override
    public Parent talkParaSmall(RootMan parent){
        System.out.println("test_child"+this.getClass());
        return null;
    }
    //对小孩来说,大人就是父母  不是重写
    public RootMan playChildGame(Parent parent){
        System.out.println("test_child");
        return null;
    }
    @Override//真正的重写 返回参数虽不同但也算是 返回结果不能扩大
    public Child talk(Parent parent){
        System.out.println("test_child"+this.getClass());
        return null;
    }

    public static void main(String[] args) {
        //子类实例
        RootMan rootMan = new RootMan();
        Parent parent = new Child();
        Child child = new Child();//小参数
        parent.getDrug(child);//要拿小孩的药量,经果拿到了大人的药量
        parent.getDrug(parent);
        parent.playChildGame(child);//执行的方法从基类开始选择
       // parent.playChildGame(parent); 报错 因为parent是子类特有的方法
        child.talkParaSmall(child);//子类句柄调用 子类方法
        parent.talk(parent);//假大人执行重写的子类方法
        child.talk(parent);//子类方法
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 fulndon@qq.com

💰

×

Help us with donation