java基础问题,java 方法为什么要覆写,在子类中重新写个方法不就好了吗
在实际应用时,什么地方用得着
12 个解决方案
#1
覆写是什么意思?我只听过重载和重写啊
#2
LZ你把继承弄清楚了那你就能理解为什么要重写了
#3
package test.resources;
public class A {
String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public void print() {
System.out.println("Class A:" + code);
}
}
package test.resources;
public class B extends A {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void print() {
// super.print();
System.out.println("Class B:" + code);
}
}
package test.resources;
import org.junit.Test;
public class T {
@Test
public void test(){
A a = new B();
a.setCode("abcd");
a.print();
}
}
#4
不说别的。。如果没覆写,光你想方法名就够你受了。。
#5
IOC反向控制,你去了解一下嘛。
#6
三楼,你好: 代码我能看懂,我的意思是:
父类的对像实例化子类,然后调用 print 覆盖 父类的 print
我的意思是子类不要用print 这个方法名(比方print1),然后 用子类对像实例化本类 B b= new B() ;b.print1();
不就完事了吗?
我是不明白JAVA 为什么要搞个覆盖方法...有什么好处吗?我不能理解
父类的对像实例化子类,然后调用 print 覆盖 父类的 print
我的意思是子类不要用print 这个方法名(比方print1),然后 用子类对像实例化本类 B b= new B() ;b.print1();
不就完事了吗?
我是不明白JAVA 为什么要搞个覆盖方法...有什么好处吗?我不能理解
#7
写程序有个原则 叫 开闭原则 大概意思是 对修改关闭 对 增加开放 比如有个 动物类(Animal) 这个动物类有 说(say) 这个方法
有如下代码要调用这个方法
public void show(Animal animal){
animal.say();
}
如果你 有个 狗类(Dog) 传进去 他调用的是狗类 特有狗说(汪) 的方法
如果你 有个 狗类(Dog) 传进去 他调用的是猫类 特有猫说(喵) 的方法
如果你 传个 人类(你自己) 进去 他就在这里 就有他 人特有 说 (提问) 的方法
而上面的代码几乎不用改变
不知道你明不明白
有如下代码要调用这个方法
public void show(Animal animal){
animal.say();
}
如果你 有个 狗类(Dog) 传进去 他调用的是狗类 特有狗说(汪) 的方法
如果你 有个 狗类(Dog) 传进去 他调用的是猫类 特有猫说(喵) 的方法
如果你 传个 人类(你自己) 进去 他就在这里 就有他 人特有 说 (提问) 的方法
而上面的代码几乎不用改变
不知道你明不明白
#8
抛开 任何 思想上东西不说
你在 B 里 顶一个 print1 方法
A a = new B(); 创建的对象a 你能调用到 print1 嘛
#9
A a=new B();//他创建的是上转型对象,它所使用的变量是继承和覆盖掉的,方法是继承和重写的方法
而B b=new B() //它创建的是一般对象b.print1();调用的是子类中的方法
#10
动态绑定在C++和Java中都是一样的,这样可以使接口保持最大的适用性,
接楼上的,比如说有两种动物Dog,Cat类,都继承Animal类,都有叫的动作,定义一个接口函数为animalSound(Animal instance)。当形参为Dog时,instance.cry();为Dog的Cry方法,为Cat时则为Cat的Cry方法,同一个接口不用写两个函数,并且当有新的类Bird等加入时,接口函数也不用改变。
接楼上的,比如说有两种动物Dog,Cat类,都继承Animal类,都有叫的动作,定义一个接口函数为animalSound(Animal instance)。当形参为Dog时,instance.cry();为Dog的Cry方法,为Cat时则为Cat的Cry方法,同一个接口不用写两个函数,并且当有新的类Bird等加入时,接口函数也不用改变。
#11
因为我们需要统一的“接口”,如果每种子类型都完全抛弃父类的方法,另起炉灶,那面向接口的编程就不复存在了。保证方法签名一致就是保证语义的一致,但是实现细节可以变化。
#12
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。
#1
覆写是什么意思?我只听过重载和重写啊
#2
LZ你把继承弄清楚了那你就能理解为什么要重写了
#3
package test.resources;
public class A {
String code;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public void print() {
System.out.println("Class A:" + code);
}
}
package test.resources;
public class B extends A {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void print() {
// super.print();
System.out.println("Class B:" + code);
}
}
package test.resources;
import org.junit.Test;
public class T {
@Test
public void test(){
A a = new B();
a.setCode("abcd");
a.print();
}
}
#4
不说别的。。如果没覆写,光你想方法名就够你受了。。
#5
IOC反向控制,你去了解一下嘛。
#6
三楼,你好: 代码我能看懂,我的意思是:
父类的对像实例化子类,然后调用 print 覆盖 父类的 print
我的意思是子类不要用print 这个方法名(比方print1),然后 用子类对像实例化本类 B b= new B() ;b.print1();
不就完事了吗?
我是不明白JAVA 为什么要搞个覆盖方法...有什么好处吗?我不能理解
父类的对像实例化子类,然后调用 print 覆盖 父类的 print
我的意思是子类不要用print 这个方法名(比方print1),然后 用子类对像实例化本类 B b= new B() ;b.print1();
不就完事了吗?
我是不明白JAVA 为什么要搞个覆盖方法...有什么好处吗?我不能理解
#7
写程序有个原则 叫 开闭原则 大概意思是 对修改关闭 对 增加开放 比如有个 动物类(Animal) 这个动物类有 说(say) 这个方法
有如下代码要调用这个方法
public void show(Animal animal){
animal.say();
}
如果你 有个 狗类(Dog) 传进去 他调用的是狗类 特有狗说(汪) 的方法
如果你 有个 狗类(Dog) 传进去 他调用的是猫类 特有猫说(喵) 的方法
如果你 传个 人类(你自己) 进去 他就在这里 就有他 人特有 说 (提问) 的方法
而上面的代码几乎不用改变
不知道你明不明白
有如下代码要调用这个方法
public void show(Animal animal){
animal.say();
}
如果你 有个 狗类(Dog) 传进去 他调用的是狗类 特有狗说(汪) 的方法
如果你 有个 狗类(Dog) 传进去 他调用的是猫类 特有猫说(喵) 的方法
如果你 传个 人类(你自己) 进去 他就在这里 就有他 人特有 说 (提问) 的方法
而上面的代码几乎不用改变
不知道你明不明白
#8
抛开 任何 思想上东西不说
你在 B 里 顶一个 print1 方法
A a = new B(); 创建的对象a 你能调用到 print1 嘛
#9
A a=new B();//他创建的是上转型对象,它所使用的变量是继承和覆盖掉的,方法是继承和重写的方法
而B b=new B() //它创建的是一般对象b.print1();调用的是子类中的方法
#10
动态绑定在C++和Java中都是一样的,这样可以使接口保持最大的适用性,
接楼上的,比如说有两种动物Dog,Cat类,都继承Animal类,都有叫的动作,定义一个接口函数为animalSound(Animal instance)。当形参为Dog时,instance.cry();为Dog的Cry方法,为Cat时则为Cat的Cry方法,同一个接口不用写两个函数,并且当有新的类Bird等加入时,接口函数也不用改变。
接楼上的,比如说有两种动物Dog,Cat类,都继承Animal类,都有叫的动作,定义一个接口函数为animalSound(Animal instance)。当形参为Dog时,instance.cry();为Dog的Cry方法,为Cat时则为Cat的Cry方法,同一个接口不用写两个函数,并且当有新的类Bird等加入时,接口函数也不用改变。
#11
因为我们需要统一的“接口”,如果每种子类型都完全抛弃父类的方法,另起炉灶,那面向接口的编程就不复存在了。保证方法签名一致就是保证语义的一致,但是实现细节可以变化。
#12
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。