abstract类和abstract方法

上一篇文章:Java中的继承(二)

抽象类、抽象方法

使用abstract修饰的类称之为 abstract类(抽象类)
使用abstract修饰的方法称之为 abstract方法(抽象方法)

abstract class People {     // 使用abstract修饰的类称之为 abstract类
	abstract int add(int x, int y);     //抽象方法只能声明,不能实现,不允许有方法体
}
  • abstract类中可以有abstract方法,也可以没有abstract方法;abstract类中也可以有非abstract方法。
  • 非abstract类中不能有abstract方法。
  • 不能使用final和abstract同时修饰同一个类,因为abstract类需要被继承,其子类可以是abstract类,也可以是非abstract类。
  • 不能使用static修饰abstract方法。
  • abstract类不能使用new关键字创建对象,abstract类需要被继承,其子类如果是一个非abstract类,需要重写abstract类中的抽象方法,即去掉abstract关键字,写出方法体。其子类如果是一个abstract类,它可以重写、也可以继承父类的abstract方法。
  • abstract类虽然不能使用new创建对象,但可以声明对象,声明的对象可以作为其子类对象的上传型对象,那么该对象就可以调用子类重写的方法。

abstract类主要作用是抽象概括出一大类事物共同具有的行为标准,通过抽象方法来实现,即只需要给出方法头,不需要给出方法体。不同的子类继承同一个抽象方法时,可以重写出各自不同的方法体,这样不同子类的对象就可以产生各自不同的行为。

abstract class Human {   //人类
	abstract void speak();     //抽象概括出人类会说话
	abstract void eat();       //抽象概括出人类会吃饭
}
class Chiness extends Human {    //中国人继承人类
	void speak(){     //重写父类抽象方法
		System.out.println("你好,世界!");
	}
	void eat(){       //重写父类抽象方法
		System.out.println("爱吃饺子。");
	}
}
class American extends Human {     //美国人继承人类
	void speak(){
		System.out.println("Hello world!");
	}
	void eat(){
		System.out.println("I like steak.");
	}
}
class Boy {
	Human boy;     //成员变量,声明一个Human类对象,Human是抽象类,只能声明,不能使用new创建对象
	void setCountry(Human b){     //形参是一个Human类的对象
		boy = b;
	}
	void act(){
		boy.speak();
		boy.eat();
	}
}
public class test {
	public static void main(String args[]){
		Human jackey = new Chiness();  //jackey是上转型对象
		Boy boy = new Boy();
		boy.setCountry(jackey);
		boy.act();
		jackey = new American();
		boy.setCountry(jackey);
		boy.act();
	}
}

在这里插入图片描述


面向抽象编程:abstract类只需要关心有哪些行为,不需要关心这些行为的具体实现。具体实现的部分交给子类程序设计者。使用多态进行程序设计的核心技术之一就是上转型对象的使用。面向抽象编程,即设计某种重要类时,面向抽象类,所设计类中的重要数据是抽象类声明的对象。


开-闭原则:让设计的系统对扩展开放,对修改关闭。在程序设计之初就考虑了以后的变化,设计了一个基本结构,当用户需求变化时,不需要再修改已有的模块,只需要扩展新的功能即可。符合开-闭原则的系统,更易于维护。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackey_Song_Odd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值