带你走进 Java 成神之路(二)擅长的领域"/>
夜光带你走进 Java 成神之路(二)擅长的领域
夜光序言:
从前之前,梦心梦如烟,恰如西风恨柳边。白发又添,不归思故颜,莫言重逢泪双面……
正文:
以道御术 / 以术识道
package day1;public class Bird extends Animal{private int wing;private int leg;@Overridepublic void eat(){//重写一下父类的eat方法System.out.println("鸟儿正在喂食~");}//直接生成带参构造public Bird(String name, int weight, String sex, int wing, int leg) {super(name, weight, sex);this.wing = wing;this.leg = leg;}//再写一个无参构造public Bird(){//什么都不写的话,默认调用父类的super}}
package day1;public class Animal {private String name;private int weight;private String sex;public void eat(){System.out.println("正在享受美食~");}public void run(){System.out.println("正在散步");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Animal(String name, int weight, String sex) {this.name = name;this.weight = weight;this.sex = sex;}public Animal(){}}
package day1;public class Dog extends Animal{private int leg;@Overridepublic void eat(){System.out.println("在啃骨头~");}public Dog(String name, int weight, String sex, int leg) {super(name, weight, sex);this.leg = leg;}public Dog(){//super()}public int getLeg() {return leg;}public void setLeg(int leg) {this.leg = leg;}}
package day1;public class Test1 {public static void main(String[] args) {Animal[] animals = new Animal[2]; //夜光:使用数组创建两个元素//父类引用指向子类变量animals[0] = new Bird("凤凰",1111,"女",1,1);animals[1] = new Dog("麒麟",1111,"男",1);//用一个foreach循环遍历一下for(Animal an : animals){an.eat();an.run();}}
}
设计一个宠物猫
按照oo的思想,我们会抽象出一个类,表示宠物猫
其中有一个eat方法,表示小猫进食的方法
package day2;//抽象一个宠物猫类
public class Cat {private String name; //定义一个姓名字段//带参数的构造方法,初始化小猫属性public Cat(String name) {this.name = name;}public void eat(){System.out.println("我是一只猫,叫做:"+this.name+",正在吃鱼");}}
package day2;//测试类
public class Test {public static void main(String[] args) {Student jim = new Student();jim.feed(new Cat("小炎")); //好好理解一下这句话,new一个对象,并且传入一个参数(name)}
}
package day2;public class Dog {private String name; //姓名字段//构造器public Dog(String name) {this.name = name;}public void eat(){System.out.println("我是一只小狗,叫做:"+this.name+",正在啃骨头");}
}
但是上面这种方案太繁琐
你会发现~每新增一个动物,都需要相应的去修改学员类,增加相应的喂食方法
我们在做项目的时候,是不想频繁修改的
项目的可维护性和可扩展性需要保障
项目经理的职责所在
为此:可以抽象出一个父类动物类,把ta作为喂食方法的参数
这是允许的,这叫做参数多态
package day2;public class Test1 {public static void main(String[] args) {Student2 student2 = new Student2();student2.feed(new Cat1("小炎"));student2.feed(new Dog1("小貂"));}}
package day2;public class Student2 {//注意:下面这个,参数是父类型动物类型,该父类及其子类的对象都可以作为参数传入public void feed(Aniaml aniaml){aniaml.eat();}}
更多推荐
夜光带你走进 Java 成神之路(二)擅长的领域
发布评论