java的抽象类,abstract关键字

java的抽象类,abstract关键字

TestAbstract.java

//抽象类abstract
//当一个类中含有抽象方法是,类是"残缺的",用abstract修饰为抽象的类,
abstract class Animal {
	private String name;

	Animal(String name) {
		this.name = name;
	}

	//抽象方法,只有方法的定义,没有方法的具体实现,抽象方法就是用来重写的
	public abstract void enjoy();

}

//抽象类不能被实例化
abstract class Cat extends Animal {
	private String eyesColor;
	
	Cat(String n,String c) {
		super(n); 
		eyesColor = c;
	}
	
	//在子类中可以不实现父类的抽象方法,仍为抽象方法,子类也要变为抽象类
	public abstract void enjoy();
}

class Dog extends Animal {
	private String furColor;
	
	Dog(String n,String c) {
		super(n); 
		furColor = c;
	}

	public void enjoy() {
		System.out.println("狗叫声......");
	}
}

class Bird extends Animal {
	Bird() {
		super("bird");
	}
	public void enjoy() {
		System.out.println("鸟叫声......");
	}
}

class Lady {
	private String name;//姓名
	private Animal pet;//宠物Animal类
	
	Lady(String name,Animal pet) {
		this.name = name; 
		this.pet = pet;
	}
	
	//我的宠物高兴了
	public void myPetEnjoy(){
		pet.enjoy();
	}
}

public class TestAbstract {
	public static void main(String args[]){
		//抽象类Cat不能被实例化
		//Cat c = new Cat("catname","blue");
		Dog d = new Dog("dogname","black");
		Bird b = new Bird();
		//Lady l1 = new Lady("l1",c);
		Lady l2 = new Lady("l2",d);
		Lady l3 = new Lady("l3",b);
		
		//根据实际的对象来确定调用的方法,不是通过引用类型来确定的,不然就就一定调用Animal中的enjoy()方法,
		//l1.myPetEnjoy();
		l2.myPetEnjoy();
		l3.myPetEnjoy();
	}
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值