抽象类,关键字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);
		
	}
}
经验分享 程序员 微信小程序 职场和发展