在笔者理解中,继承可以提高代码的复用性,多个相同的成员可以放在同一个类中;也能提高代码的维护性,如果方法的代码需要修改,修改一个地方即可。在这里笔者在道例题中用到了无参构造,有参构造,封装,super关键字,为何要使用super关键字?是因为Animal这个父类中的年龄和名字是private私有的修饰符,因此就有参构造就不能调用到父类的属性,但是在Animal这个父类中定义了有参构造,因此子类就能通过super关键字来调用到父类的属性,这道综合的继承例题中有参构造让笔者头疼了一会,不知道怎样调到父类的属性,后面才用super关键字实现。
举例:猫,狗,用继承来实现:
猫:
行为(方法):
抓老鼠
狗:
行为(方法):
看门
共性(父类):
名字,年龄
--------------------------------------------------------------------------------------------------------------------------
Cat类:
package com.JC;
public class Cat extends Animal{
public Cat(){}
public Cat(String name,int age){
super(name,age);
}
public void grab(){
System.out.println(getName()+"老鼠爱大米,我爱抓老鼠");
}
}
Dog类:
package com.JC;
public class Dog extends Animal{
public Dog(){}
public Dog(String name,int age){
super(name,age);
}
public void watch(){
System.out.println(getName()+"为主人看门,谁来谁死");
}
}
Animal(共性):
package com.JC;
public class Animal {
private String name;
private int age;
public Animal(){
}
public Animal(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age<0||age>20){
System.out.println("年龄错误!!!!!");
}else {
this.age = age;
}
}
public void introduce(){
System.out.println("大家好,我是"+name+"今年"+age+"岁!");
}
}
测试类:
package com.JC;
public class AnimalTest {
public static void main(String[] args) {
System.out.println("狗的有参构造");
Dog d1=new Dog("杰克",3);
System.out.println(d1.getName()+d1.getAge());
d1.watch();
d1.introduce();
System.out.println("----------------------------------");
System.out.println("狗的无参构造");
Dog d2=new Dog();
d2.setName("约翰");
d2.setAge(2);
System.out.println(d2.getName()+d2.getAge());
d2.watch();
d2.introduce();
System.out.println("------------------------------------");
System.out.println("猫的有参构造");
Cat c1=new Cat("汤姆",4);
System.out.println(c1.getName()+c1.getAge());
c1.grab();
c1.introduce();
System.out.println("--------------------------------------");
System.out.println("猫的无参构造");
Cat c2=new Cat();
c2.setName("爱丽丝");
c2.setAge(2);
System.out.println(c2.getName()+c2.getAge());
c2.grab();
c2.introduce();
}
}
运行结果: