抽象类

关键字为:abstract
Java中使用抽象类作用:限制实例化(不能建立对象)
语法:

Public abstract class Pet{
//属性
//方法
  }

abstract也可用于方法——抽象方法

  1. 抽象方法没有方法体
  2. 抽象方法必须在抽象类里
  3. 抽象方法必须在子类中被实现,除非子类也是抽象类
    抽象类,多态

final用法

被final定义的类不可以被修改
如:

Public final  class Dog(){
       //… 
    };

被final定义的方法为最终方法不可以被修改

  Public final void show(){
       //…
     };

被final定义的属性不可以被修改(常量)

final String name=”小黑”;

多态

多态:提供的接口(方法),面对不同的对象执行不同的的操作

使用多态实现思路(实现多态的三要素)

  1. 编写具有继承关系的父类和子类
  2. 子类重写父类的方法
  3. 使用父类的引用指向子类的对象

向上转型:(自动转换)//父类的引用指向不同的对象

如: Dog dog= new Dog(“旺财”,“土狗”)
改为Pet dog= new Dog(“旺财”,“土狗”)

向下转型//父类到子类的转换

如:Pet pet=new Dog(“欧欧”,”雪纳瑞”);
Dog dog = (Dog)pet; //必须转换为父类指向的真实子类类型

使用instanceof运算符

语法:

对象 instanceof 类或接口

作用:匹配两个类型是否相等(通常和强制类型转换结合使用)

	   //向下转型
	public void  play(Pet pet) {
		if (pet instanceof Dog) {
			//强转
			Dog dog = (Dog)pet;
			dog.fly();
		}else if (pet instanceof Penguin) {
			Penguin pen=(Penguin)pet;
			pen.swimming();
		}
	}

实现多态的两种形式

1.使用父类作为方法形参实现多态
2.使用父类作为方法返回值实现多态

实例:
//父类

public abstract class Pet {
	//属性
	String name;
	int health=80;
	int love=0;
	//构造
	public Pet() {	
	}
    public Pet(String name) {
    	this.name =name;
	}
    //抽象方法
    public abstract void eat();
    public void show(){
		System.out.println("名字:"+this.name+"\t品种:"+"\t健康值:"+this.health+"\t亲密度:"+this.love);
	}	
}

/*

  • 子类:狗类继承父类
    */
public class Dog extends Pet{
   //属性
   String strain;
   //构造
   public Dog(String name,String strain) {
   	super(name);
   	this.strain=strain;
   }
   //方法1:吃
   public void eat() {
   	if (super.health>=100) {
   		System.out.println("狗狗吃饱了。。。");
   	}else {
   		super.health=+5;
   		System.out.println("狗狗吃鸡翅了");
   	}
   }
   //方法2:和主人玩飞盘
   public void fly() {
   	System.out.println("和主人玩飞盘很开心");
   }
   public void show(){
   	System.out.println("名字:"+this.name+"\t品种:"+this.strain+"\t健康值:"+this.health+"\t亲密度:"+this.love);
   }	
}

//子类:企鹅类

public class Penguin extends Pet {
	//属性
	String sex;
	//构造
	public Penguin(String name,String sex) {
		super(name);
		this.sex=sex;
	}
	//方法1:吃
	public void eat() {
		if (super.health>=100) {
			System.out.println("小猫鱼吃多了。。。");
		}else {
			super.health=+3;
			System.out.println("猫吃小鱼了。");
		}
	}
	//方法2:游泳
	public void swimming() {
		System.out.println("和主人游泳很开心");
	}
	public void show(){
		System.out.println("名字:"+this.name+"\t性别:"+this.sex+"\t健康值:"+this.health+"\t亲密度:"+this.love);
	}	
}

//主人类:创建多态方法

public class Master {
	//多态方法1使用父类作为方法形参实现多态:喂食
	public void feed(Pet pet) {
		pet.eat();
	}
	//多态方法:和动物玩
	   //向下转型
	public void  play(Pet pet) {
		if (pet instanceof Dog) {
			//强转
			Dog dog = (Dog)pet;
			dog.fly();
		}else if (pet instanceof Penguin) {
			Penguin pen=(Penguin)pet;
			pen.swimming();
		}
	}
	//方法2.使用父类作为方法返回值实现多态
	public Pet choice(int i) {
		Pet pet =null;
		if (i==1) {
			pet=new Dog("小黑", "拉布拉多");
		}else if (i==2) {
			pet=new Penguin("小白", "雌");
		}
		return pet;
	}
}

/*

  • 测试类
    */
public class DomeTest {
   public static void main(String[] args) {
   	//创建主人对象
   	Master master=new Master();
   	Scanner input=new Scanner(System.in);
   	System.out.println("请选择宠物:1.狗2.猫");
   	int i=input.nextInt();
   	//向上转型
   	//创建狗狗对象
   	Pet dog=new Dog("小黑", "中华田园犬");
   	//创建企鹅对象
       Pet pen=new Penguin("小白", "雌");
   	Pet p=master.choice(i);
   	p.show();
   	
   	master.feed(dog);
       master.feed(pen);
       
       master.play(dog);
       master.play(pen);
   }
}

结果为:
抽象类,多态

总结

抽象类,多态

相关文章: