重写是为了做什么

java_wangyang 2016-04-02 10:38:01
加精
public class Study_3 {
public static void main(String[] args){
B zz=new B();
zz.bb();
}
}
class A{
public void aa(){

}
public void bb(){
this.aa();
}
}
class B extends A{
public void aa(){//我在这里重写了aa,有什么意义呀。
System.out.println("测试");
}
}

看书上说,继承后,子类复制了父类的接口。是不是子类、父类公用一个接口,如果是这样那么,这样做为实现什么功能呢?
重写后调用的还是子类的函数,好像与父类没几个关系,为什么要覆盖父类里的函数?
继承这张我问题太多,求大神指教.
...全文
6359 76 打赏 收藏 转发到动态 举报
写回复
用AI写文章
76 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlp4207 2017-10-22
  • 打赏
  • 举报
回复
引用 14 楼 ch1240249252 的回复:
打个比方 你跟你爹什么都一样,包括爱好,生活... ... 因为你是遗传的比较好 这个叫做继承 有一天你剪了一个杀马特 这就叫重写
这个说法厉害了
qq_36811164 2017-09-21
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
其实 继承父类 然后重写这个 有很重要的意义。 楼上说的很形象了。 我觉得重写实现了个性话,可以满足很多不同的需求。同时又可以获得来自父类的其他方法。你可以直接用,不用改。
insist_on_doing_y 2017-07-03
  • 打赏
  • 举报
回复
引用 8 楼 weixin_34493452 的回复:
举个例子,你这样理解。狗和猫都继承动物类,动物都有吃饭的功能。但是对于狗和猫这两个对象,他们自身实现吃饭这个功能的形式是不一样的。狗有狗的吃法,猫有猫的吃法。解释有点粗糙,希望你能理解。
形容很贴切,帮助很大,谢谢
big_funny_force 2017-05-17
  • 打赏
  • 举报
回复
引用 16 楼 NoMasp 的回复:
[quote=引用 15 楼 u010565261 的回复:] [quote=引用 14 楼 ch1240249252 的回复:] 打个比方 你跟你爹什么都一样,包括爱好,生活... ... 因为你是遗传的比较好 这个叫做继承 有一天你剪了一个杀马特 这就叫重写
我只能说666[/quote] 确实是太666了[/quote]我也想说的
a_elegant_joker 2017-05-17
  • 打赏
  • 举报
回复

//定义一个接口Animal 动物
interface Animal {
	void shout();
	/**
	 * 接口里面的方法都是抽象方法,可以不写方法体, 也就是说Animal动物的叫声我们先不定义
         *,等有具体的动物比如狗的时候 我们在实现它的叫声,看下面
	 */

}

// 定义狗类继承Animal接口
class Dog implements Animal {

	@Override
	public void shout() {
		// TODO Auto-generated method stub
		// 这里实现具体的叫声,这就是重写方法的意义
		System.out.println("狗的叫声 旺旺");
	}

}

// 定义猫类继承Animal接口,这里同理
class Cat implements Animal {

	@Override
	public void shout() {
		// TODO Auto-generated method stub
		System.out.println("猫的叫声 猫猫");
	}

}

public class Demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/**
		 * 现在一共有3个shout 方法,你可以用这种方法来实现叫声 Dog an1=new Dog(); an1.shout(); Cat
		 * an2=new Cat(); an2.shout();
		 * 
		 */
		// 调用animalShout方法,传入对象,第二种就是多态
		animalShout(new Dog());
		animalShout(new Cat());

	}

	// 定义一个静态的AnimalShout方法,接受一个Animal类型的参数
	public static void animalShout(Animal an) {
		an.shout();
	}
}

ye_se_cong_cong 2017-05-15
  • 打赏
  • 举报
回复
自己现在的理解:重写是为了方便一个相同动作函数名称可以被不同的对象使用,比如说猫咪和狗都要吃饭,如果猫咪用eat(),狗狗也应该可以用这个名字来作为吃饭的函数吧?这里我认为强调名称可复用。
qq_34609546 2017-05-13
  • 打赏
  • 举报
回复
当子类的要求父类无法满足时,子类就需要重写,重写以后,会调用子类重写以后的版本,从而实现子类的要求!
qq_38351747 2017-05-09
  • 打赏
  • 举报
回复
引用 6 楼 bqforyou的回复:
重写允许你用不同的方法做同一件事。
应该是用同样的方法,做不一样的事情吧……
qq_38277499 2017-04-11
  • 打赏
  • 举报
回复
受教了哈哈哈
杂技猫 2016-12-26
  • 打赏
  • 举报
回复
你需要理解一下继承
greatboy_hzuser 2016-12-25
  • 打赏
  • 举报
回复
重写的意义在于实现多态,因为多态的必要条件就是继承和重写,在父类声明子类引用时,如果子类重写了父类的方法,则是调用子类重写的方法,而new不同子类时若都重写了父类的方法,则可以相应不同的消息,实现了多态. 特别是在接口上,最能体现多态,比如接口只写了方法名,表示该方法可以做什么但并未写方法体,也就是说具体的方法由实现该接口的类来实现,那就要重写接口的该方法,而且可以由多个类来实现该方法。举例:一个接口规定了一个可以“出行”的方法,但可以由多个类来实现该方法,比如类1写了一个可以“坐汽车”的出行方法,另一个类2写了“骑自行车”的出行方法。大概就是这个意,不知道你清楚吗?
攻城狮小趙 2016-12-24
  • 打赏
  • 举报
回复
主要是为了多态 继承 重写 父类的引用指向子类对象
Golang后端技术 2016-08-12
  • 打赏
  • 举报
回复
同一件事情 不同的方法实现
jiang_liu_ 2016-08-09
  • 打赏
  • 举报
回复
class Foo(){ void action(){ } } class Child1 extends foo(){ void action1(){ System.out.println("child1"); } } class Child2extends foo(){ void action2(){ System.out.println("child2"); } } class TestMetho(){ void test(Foo foo){ foo.action(); } } 就这么说,还是刚才差不多的代码,不过这次没有重写,一个action1,一个action2.我想将他们都能传入TestMethod类的test方法,那么我怎么才能做到,当传入Child1的时候调用action1,传入Child2的时候调用action2呢,当然,你可以说添加个判断就是了,但是如果再继续添加几个子类呢,那要不停的修改代码。 所以还是用重写的,都调用action,你是哪个子类的,就调用哪个的方法实现。
jiang_liu_ 2016-08-09
  • 打赏
  • 举报
回复
这个就要说到多态了,后面的编程一般都是面向抽象编程,一般都是父类引用指向子类对象,调用父类的方法,实际上回调用执行子类重写的方法,但是不同子类的该方法实现不同,但是不管他的实现相不相同,都只用调用这个方法,则会自动去实现子类的方法。 比如 class Foo(){ void action(){ } } class Child1 extends foo(){ void action(){ System.out.println("child1"); } } class Child2extends foo(){ void action(){ System.out.println("child2"); } } class TestMetho(){ public static void main(String[] args){ test(new Child1()); test(new Child2()); } void test(Foo foo){ foo.action(); } } test方法里参数是他们的父类,也就是抽象类,那么只要是Foo类的子孙类,都可以当做参数传入,这就是多态,然后foo.action()访问的就是传入参数的方法。如果test方法写的参数是Child1类型,那么久不能传入Child2类对象。但是每个子类的方法具体实现不一样,如果Child1不重写,写的action1方法,Child2血的action2方法,那么foo无法调用,即使可以调用,那么也不好写,foo.action1()还是foo.action2,不论哪种都写死了,不能调用别的类的。 感觉说的有点乱,有点啰嗦,不理解的地方再问吧。
livision233 2016-05-31
  • 打赏
  • 举报
回复
引用 14 楼 ch1240249252 的回复:
打个比方 你跟你爹什么都一样,包括爱好,生活... ... 因为你是遗传的比较好 这个叫做继承 有一天你剪了一个杀马特 这就叫重写
太形象了
kutuzov2016 2016-05-30
  • 打赏
  • 举报
回复
生物学上的 基因突变
Ordinary-1995 2016-04-22
  • 打赏
  • 举报
回复
重写就是一件事用几种不同的方法去做。虽然也可以多写几个类,但是这样就显得代码太冗余了
bcsflilong 2016-04-21
  • 打赏
  • 举报
回复
重写的意义在于,一个父类有多个子类时,不同的子类继承了同一个父类中的同一个方法,但是不同子类方法中的方法体不一样时(要求的数据不一样)就需要重写了
加载更多回复(51)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧