重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你好,很高兴回答你的问题。
站在用户的角度思考问题,与客户深入沟通,找到凯里网站设计与凯里网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广、域名注册、虚拟主机、企业邮箱。业务覆盖凯里地区。
可以进行如下修改,将breed的实现移到抽象父类Animal中,略做修改,修改后代码如下
public Animal breed(){
Animal ret =null;
if(isBreedable() Math.random()getValue()){
ret=getAnimal();
}
return ret;
}
父类Animal中增加如下两个抽象方法:
public abstract double getValue();
public abstract Animal getAnimal();
在Fox中不再需要实现breed,实现新定义的两个方法:
public abstract double getValue(){
return 0.5;
}
public abstract Animal getAnimal(){
return new Fox();
}
在Rabbit类中类似处理:
public abstract double getValue(){
return 0.12;
}
public abstract Animal getAnimal(){
return new Rabbit();
}
如果有帮助到你,请点击采纳。
我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。
import java.util.Date;
public class $ {
public static void main(String[] args) {
Father f = new Father("test");
f.getA();
f.getB();
f = new Son1();
f.getA();
f.getB();
Son0 son = new Son0();
son.getA();
son.getB();
son.getC();
son.getD();
}
}
class Father {
private int id;
private String name;
private int age;
private boolean sex;
private Date birthDay;
public Father(String name, int age, boolean sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public Father() {
this(null, 0, false);
}
public Father(String name) {
this(name, 0, false);
}
public void getA() {
System.out.println("father a");
}
public void getB() {
System.out.println("father b");
}
}
class Son0 extends Father {
private String sonName;
private in sonId;
public void getC() {
System.out.println("Son0 c");
}
public void getD() {
System.out.println("Son0 d");
}
}
class Son1 extends Father {
private String sonName;
private in sonId;
public void getA() {
System.out.println("Son1 a");
}
public void getB() {
System.out.println("Son1 b");
}
}
结果:
father a
father b
Son1 a
Son1 b
father a
father b
Son0 c
Son0 d
//Animal.java
public class Animal {
private String name;
protected String species;
protected int age;
public Animal(String name,int age){
this.name = name;
this.age = age;
}
public String showInfo(){
String msg = "打印对象详细信息……";
return msg;
}
public void setSpecies(){
this.species = this.getClass().getSimpleName();
}
}
//Dog.java
public class Dog extends Animal {
private String name;
public Dog(String name,int age){
super(name,age);
}
public static void main(String[] args){
Dog d = new Dog("Tom",5);
System.out.println(d.showInfo());
}
//重写方法
public String showInfo(){
String msg = "";
msg = "My name is " + name + ".\nI'm a " + species + ".\nI'm " + age + ".";
return msg;
}
}
楼主问的是你解决问题的那段代码的意义吧,楼上的回答实在是让人不知所云啊。
A是父类。B和C继承A。
A b = new B();
A c = new C();
这个就不用我啰嗦了吧,Java的多态。
String str = "B";
A a = (A) Class.forName(str).newInstance();
我来解释一下它吧,这个技术叫反射,主要意思就是在编译的时候不指定要创建哪个的对象,而在执行过程中才去指定。不明白请百度百科JAVA反射机制。Class.forName(str)加载类名叫str的那个类,newInstance()创建该类的对象,因为Java并不知道实例化的类是谁,所以返回对象是Object对象,这就需要造型(A) Class.forName(str).newInstance();这样就返回了A类对象,楼主明白否?