/*
* 1.用abstract关键字来修饰一个类时,这个类叫做抽象类
* 用abstract关键字来修饰一个方法时,这个方法叫做抽象方法
* 2.含有抽象方法的类必须声明为抽象类,抽象类就是用来被继承的,抽象方法必须被重写
* 3.抽象类不能被实例化
* 4.抽象方法只需声明不需要实现
*/
abstract class Animal {
private String name;
Animal(String name) {
this.name = name;
}
public abstract void enjoy();// 4.
}
class Dog extends Animal {
private String furColor;
Dog(String n, String c) {
super(n);
furColor = c;
}
public void enjoy() {
System.out.println("狗叫声......");//2.抽象类就是用来被继承的,抽象方法必须被重写
}
}
abstract class Cat extends Animal {
private String eyesColor;
Cat(String n, String c) {
super(n);
eyesColor = c;
}
}
class Bird extends Animal {
Bird() {
super("bird");
}
public void enjoy() {
System.out.println("鸟叫声......");
}
}
class Lady {
private String name;
private Animal pet;
Lady(String name, Animal pet) {
this.name = name;
this.pet = pet;
}
public void myPetEnjoy() {
pet.enjoy();
}
}
public class Test {
public static void main(String args[]) {
// Cat c = new Cat("catname","blue");//3.
Dog d = new Dog("dogname", "black");
Bird b = new Bird();
Lady l2 = new Lady("l2", d);
Lady l3 = new Lady("l3", b);
l2.myPetEnjoy();
l3.myPetEnjoy();
}
}