新建一个父类
public class Animal {
private String name;
private String color;
public Animal() {
super();
}
public Animal(String name, String color) {
super();
this.name = name;
this.color = color;
}
public void eat () {
System.out.println("吃东西...");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
建一个 子类 Dog
//extends 继承
//Dog 子类 Animal 父类
//子类继承父类后自动拥有父类的 public和protected的 属性和方法
//把多个子类中重复的代码提取到父类中可以减少代码量
//父类的 构造方法 无法继承给子类
public class Dog extends Animal {
//子类可以添加自己的属性和和方法
private int age;
//子类构造方法 必须使用 super 调用父类的构造方法
public Dog() {
super();
}
public Dog(String name, String color) {
//super调用父类的属性和方法
//this 调用当前类的属性和方法
super(name, color);
}
public Dog(String name, String color,int age) {
super(name, color);//把name 和 color 赋值给父类的属性
this.age = age;//把age 赋值给当前类的属性
}
//子类可以重写父类的方法,对父类提供的功能做出不同的表现
@Override//子类重写父类必须加@Override 标识做出说明
public void eat () {
System.out.println("啃骨头...");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
建立一个人的类
public class Person {
private Animal animal;//人养宠物
public Animal getAnimal() {
return animal;
}
public void setAnimal(Animal animal) {
this.animal = animal;
}
}
建立一个可执行main方法类
public class Application {
public static void main(String[] args) {
//Animal animal = new Animal("老板","灰白");
Dog dog = new Dog("总裁","黑白");
// dog.setName("总裁");
// dog.setColor("黑白色");
dog.setAge(2);
dog.eat();
Cat cat = new Cat("妙妙","黑白","折耳猫");
Person person = new Person();
//多态
//使用父类类型(Animal)表示一系列的子类类型(Dog,Cat...)
//可以把子类对象(dog)赋值给父类变量(animal)
//实际调用的方法是子类的方法
//好处:
//1、对于同一个方法(eat)随着传入的子类对象不同,可以做出不同的响应
//2、让程序具有良好的的扩展性
// 例如:不需要修改person 即可喂养更多的宠物
//条件:
//1、存在继承关系(Dog.Cat都继承自Animal)
//2、存在父类类型表示一组子类类型(private Animal animal)
//3、子类对象赋值给父类类型变量(person.setAnimal(dog))
//4、子类重写父类的方法
person.setAnimal(dog);
person.getAnimal().eat();
person.setAnimal(cat);
person.getAnimal().eat();
}
}