JAVA abstract类和abstract方法

1、abstract类:

abstract class A{
   ........
}

2、abstract方法:

abstract int min(int x,int y);

对于abstract方法,只允许声明,不允许实现(没有方法体),而且不允许使用final和abstract同时修饰一个方法或类,也不允许使用static修饰abstract方法,即abstract方法必须是实例方法。

3、注意事项:

(1)abstract类中可以有abstract方法,也可以有非abstract方法:

abstract class A{
  abstract int min(int x,int y);
    int max(int x,int y){
         return x>y?x:y;
    }
}

注意:abstract类中可以没有abstract方法

(2)abstract类不能用new运算符创建对象:

对于abstract类,我们不能使用new运算符创建该类对象。如果一个非抽象类是某个抽象类的子类,那么它必须重写父类的重写方法,给出方法体,这就是为什么不允许使用final和abstract同时修饰一个方法或类的原因。

(3)abstract类的子类:
如果一个非abstract类是abstract类的子类,它必须重写父类的abstract方法,即去掉abstract方法的abstract修饰,并给出方法体。如果一个abstract类是abstract类的子类,它可以重写父类的abstract方法,也可以继承父类的abstract方法。

(4)abstract类的对象作上转型对象:
可以使用abstract类声明对象,尽管不能使用new运算符创建该对象,但该对象可以成为其子类对象的上转型对象,那么该对象就可以调用子类重写的方法。
举例:

package Abstract;


abstract class GirlFriend{
	abstract void speak();
	abstract void cooking();
}
class ChinaGirlFriend extends GirlFriend{
	void speak() {
		System.out.println("你好!");
	}
	void cooking() {
		System.out.println("鱼香肉丝");
	}
}
class AmericanGirlFriend extends GirlFriend{
    void speak() {
    	System.out.println("Hello!");
	}
	void cooking() {
		System.out.println("beef");
	}
}
class Boy{
	GirlFriend friend;
	void setGirlfriend(GirlFriend f) {
		friend=f;
	}
	void showGirlFriend() {
		friend.speak();
		friend.cooking();
	}
}

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
          GirlFriend girl=new ChinaGirlFriend();
          Boy boy=new Boy();
          boy.setGirlfriend(girl);
          boy.showGirlFriend();//子类对象的上转型对象调用子类重写的方法
          girl=new AmericanGirlFriend();
          boy.setGirlfriend(girl);
          boy.showGirlFriend(); //子类对象的上转型对象调用子类重写的方法
	}

}

(5)理解abstract类:

1、抽象类可以抽象出重要的行为标准,该行为标准用抽象方法表示。即抽象类封装了子类必须要有的行为标准。
2、抽象类声明的对象可以成为其子类的对象的上转型对象,调用子类重写的方法,即体现子类根据抽象类里的行为标准的具体行为。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值