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(); } }
IOC反向控制,你去了解一下嘛。
三楼,你好: 代码我能看懂,我的意思是: 父类的对像实例化子类,然后调用 print 覆盖 父类的 print 我的意思是子类不要用print 这个方法名(比方print1),然后 用子类对像实例化本类 B b= new B() ;b.print1(); 不就完事了吗? 我是不明白JAVA 为什么要搞个覆盖方法...有什么好处吗?我不能理解
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();
}
}
父类的对像实例化子类,然后调用 print 覆盖 父类的 print
我的意思是子类不要用print 这个方法名(比方print1),然后 用子类对像实例化本类 B b= new B() ;b.print1();
不就完事了吗?
我是不明白JAVA 为什么要搞个覆盖方法...有什么好处吗?我不能理解
有如下代码要调用这个方法
public void show(Animal animal){
animal.say();
}
如果你 有个 狗类(Dog) 传进去 他调用的是狗类 特有狗说(汪) 的方法
如果你 有个 狗类(Dog) 传进去 他调用的是猫类 特有猫说(喵) 的方法
如果你 传个 人类(你自己) 进去 他就在这里 就有他 人特有 说 (提问) 的方法
而上面的代码几乎不用改变
不知道你明不明白
抛开 任何 思想上东西不说你在 B 里 顶一个 print1 方法
A a = new B(); 创建的对象a 你能调用到 print1 嘛
而B b=new B() //它创建的是一般对象b.print1();调用的是子类中的方法
接楼上的,比如说有两种动物Dog,Cat类,都继承Animal类,都有叫的动作,定义一个接口函数为animalSound(Animal instance)。当形参为Dog时,instance.cry();为Dog的Cry方法,为Cat时则为Cat的Cry方法,同一个接口不用写两个函数,并且当有新的类Bird等加入时,接口函数也不用改变。