抽象类,关键字abstract
abstract抽象关键字,没必要实现此方法,但是有必要定义标准 当一个类class里有抽象方法,那么这个类必须改为抽象类 抽象方法 就是用来重写的 抽象类不能被实列化
//package com.yueke.qingting;
//抽象类,关键字abstract
abstract class Animal2{
private String name;
Animal2(String name){
this.name=name;
}
public abstract void enjoy();//抽象方法,相当于c++里虚函数;只定义标准,所以没必要写{},它的子类去实现
}
class Cat2 extends Animal2{
private String eyeColor;
Cat2 (String n,String c){
super(n);
eyeColor=c;
}
public void enjoy(){
System.out.println("猫的叫声……");}//这个方法必须重写,因为父类里只定义 没有写
}
class Dog2 extends Animal2{
private String fulColor;
Dog2 (String n,String c){
super(n);
fulColor=c;
}
public void enjoy(){
System.out.println("狗的叫声……");}
}
class Lady2{
private String name;
private Animal2 pet;//类型 定义成父类的引用最灵活;可以给程序带来最大的灵活性(狗猫鸡鸭都可以)
Lady2(String name,Animal2 pet){
this.name=name;
this.pet= pet;
}
public void myPetEnjoy(){
pet.enjoy();//Animal.enjoy
}
}
public class TestAbstract {
public static void main(String[]args){
Cat2 cc=new Cat2("catName","blue");
Dog2 DD=new Dog2("dogname","black");
Lady2 L1=new Lady2("L1",cc);
Lady2 L2=new Lady2("L2",DD);
//Animal aa =new Animal("Animal name");// Animal是抽象的; 无法实例化
L1.myPetEnjoy();
L2.myPetEnjoy();
//aa.enjoy();
//System.out.println(aa);
}
}
