1022_学习重写和继承中遇到的那些坑

本文探讨了Java中子类如何重写父类的方法,强调方法名、参数列表和返回值类型的匹配,以及访问权限的扩大。通过示例代码解释了重写规则,并指出子类对象调用重写方法时,实际执行的是子类的实现。同时,文章纠正了一个关于方法重写理解的常见误区。
摘要由CSDN通过智能技术生成

重写:当子类继承自父类的相同方法,方法名要相同,形参列表相同,子类的返回值类型要更小或相等,子类的访问权限比父类大

  1. 定义父类
    在这里插入图片描述

  2. 重写子类
    报错程序
    报错:
    在这里插入图片描述
    报错原因:子class的定义应该在父类定义的括号之外

  3. 重写成功的案例:

public class Main {
    public static void main(String[] args) {
        Goo o = new Goo();
        o.f();
        Foo oo = new Goo();
        oo.f();
    }
    }
 
class Foo{
    public void f(){
        System.out.println("Foo.f()");
    }
}
class Goo extends Foo{
    public void f(){
        System.out.println("Goo.f()");
    }
}

输出:
在这里插入图片描述
4. 正确的案例:

public class Main {
	public String name(){
		return "chaojiyingxioing";
	}
	public static void main(String []args) {
    	Heroson hero1= new Heroson();
    	Main hero2= new Main();
    	//Heroson hero12= new Main();  这条报错:Type mismatch: cannot convert from Main to Heroson,不能用父类覆盖子类
    	Main hero21= new Heroson();
    
    	System.out.println(hero1.name());  //超人
    	System.out.println(hero2.name());  //chaojiyingxioing
    	//System.out.println(hero12.name());
    	System.out.println(hero21.name());  //这条输出正确结果:超人
	}
}

class Heroson extends Main{
	public String name(){
		return "超人";
	}
	public Main hero(){
		return new Main();
	}

}

有一点要注意的是,我以为的重写意思是子类直接更改父类,所以一开始以为下面这个是失败的案例:

public class Main {
	public String name(){
		return "chaojiyingxioing";
	}
	public static void main(String []args) {
	Heroson hero1= new Heroson();
	Main hero2= new Main();
	//String x=new String();
	//x=hero.name();
	System.out.println(hero1.name());//结果为超人
	System.out.println(hero2.name());//结果为chaojiyingxioing,我以为这个正确的应该是 超人
	}

}

class Heroson extends Main{
	public String name(){
		return "超人";
	}
	public Main hero(){
		return new Main();
	}

}

思路错误,正确的理解是:Main hero21= new Heroson(); 意思是:

当子类对象的重写方法被调用时(无论通过子类的引用还是通过父类的引用),运行的都是子类重写后的方法。

在这里插入图片描述
总结:啊我好笨

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值