抽象类--

抽象类

概述
在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
在这里插入图片描述
也就是说,之前的多态中定义了动物类,动物类中有个动物吃东西的方法,但其实并不知道具体是什么动物,所以在动物类中应该只能声明一个所有动物都会有的特征方法。这就是抽象方法,而动物类则是抽象类。

那么如何定义一个没有方法体的抽象方法?

//动物类
public abstract class Animal{
      public abstract void eat();
}
//定义为抽象类和抽象方法

那么抽象类就不能这样创建对象了:

Animal a=new Animal();

抽象类的特点

一个类里有抽象方法,那么这个类一定是抽象类,则类的前面一定要写abstract。
但是抽象类里面可以没有抽象方法,可以创建有方法体的方法,但这样意义不大。

抽象类如何创建对象?
这里则要用用多态的形式创建对象了
回忆一下多态需要满足的条件:
1.有继承/实现关系
2.有方法重写
3.有父类引用指向子类对象

//父类 抽象类
package myday;

public abstract class Animal {
	public abstract void eat();
	
}
//子类
package myday;

public class Cat extends Animal{
	//方法重写
	public void eat() {
		System.out.println("猫吃鱼");
	}
}
//测试
package myday;

public class Demo {
	public static void main(String[] args) {
		Animal c=new Cat();//向上转型
		c.eat();
		//输出:猫吃鱼
	}
}

另外,多态中子类一样可以继承父类中的方法,也就是说,就算子类没有重写父类的该方法,但子类可以运行。

//父类 抽象类
package myday;

public abstract class Animal {
	public abstract void eat();
	public void sleep(){
	System.out.println("睡觉");
	}
}
//子类
package myday;

public class Cat extends Animal{
	//方法重写
	public void eat() {
		System.out.println("猫吃鱼");
	}
}
//测试
package myday;

public class Demo {
	public static void main(String[] args) {
		Animal c=new Cat();//向上转型
		c.eat();
		c.sleep();//继承父类
		//编译看左,运行看右
		//输出:猫吃鱼
		//      睡觉
	}
}

注意
抽象类的子类要么必须重写抽象类中的抽象方法(但子类写的不是抽象方法,而是将该方法具体化了,上面有例子),要么该子类本身也是个抽象类。
抽象类中是可以有非抽象方法的。
在这里插入图片描述

抽象类的成员特点

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值