抽象类案例abstract

/*抽象类:在提取父类的过程中,某一个共性方法子类各自不同的实现方式,
 * 那么该方法需要修饰为abstract,该类就是抽象类的了
 * 
 *抽象类的特点:
 *1:抽象类不能创建对象,因为含有对象的方法
 *2:继承了抽象类的子类,没有重写父类中的抽象方法,那么该子类还是抽象类
 *3:抽象类一定是父类
 *4:抽象类也有构造方法的
  抽象类和普通类的区别:
  相同点:都是类,都是在描述事物
  不同点:
  ①抽象类不能创建对象,普通类可以创建对象
  ②抽象可以含有抽象方法,普通类不能含有抽象方法
  
 *5:抽象类不嫩隔阂哪里关键字同时使用?
 ①不能和final:因为final修饰的方法不能重写,abstract修饰的方法必须能被重写,2者冲突,因此不能同时使用
 ②不能和static:因为static修饰的方法可以直接通过类名调用,abstract修饰的方法不能通过类名调用
 ③不能和private:应为priavate修饰的方法不能被子类重写,abstract修饰的方法必须能被重写
 
 6.抽象类一定含有抽象方法吗?
 不一定的:含有抽象方法的一定是抽象类,当不希望这个类创建对象时,就可以把该类修饰类abstract抽象类。
 *
 *例如有2个类,狼类,和父类,他们都有一个行为就是叫
 *他们都属于犬类,可以提取一个父类出来,因此有父类犬类
 *无法定义是谁叫,因此,会把这个方法抽象,注意:这个类也要是抽象的
 */
package item;
//案例1:狼和狗的共同行为叫,都属于犬科
abstract class Qianke
{
public  abstract void haojiao();//没有实现的方法使用abstract来修饰,还不知道是汪汪叫还是嗷嗷叫,

}
class Lang  extends Qianke//狼类
{
public void haojiao()
{
System.out.println("嗷嗷叫lang");
}
}
class Dog extends Qianke//狗类
{
public void haojiao()
{
System.out.println("汪汪叫dog");
}
}
public class TestAbstract {
public static void main(String[] args) {  
// Shape s=new Shape();//不能NEW会报错,抽象类不能创建对象
//案例2演示:
Rectangle rle=new Rectangle(6,3);
System.out.println("矩形面积="+rle.getArea());

}


}
//案例2:计算圆形和矩形的面积,//圆形和矩形都一个共性是形状父类,都是求面积
abstract class Shape
{
public abstract double getArea();  
}
abstract class Circleyx extends Shape
{
private double radius;
Circleyx(double radius)
{
this.radius=radius;
}
//继承了父类中的抽象方法,含有抽象方法,如果没有重写该抽象方法,那么该类也是抽象类  
}
class Rectangle extends Shape
{
private double length;
private double width;
Rectangle(double length,double width)
{
this.length=length;
this.width=width;
}
public double getArea()//重写构造方法后,就可以使此类不是抽象类
{
return this.length*this.width;
}

}

-------------------------------------------------------------------------

/**抽象类案例3:
 * 需求:公司中程序员有姓名:工号,薪水,工作内容,
 * 项目经理除了有姓名,工号,薪水,还有奖金,工作内容
 * 给出需求进行数据建模、
 */


package item;
abstract class Employee//分析:程序员和经理都是员工
{
private String name;//姓名
private String id;//工号
private double money;//薪水
public  Employee(){}
public  Employee(String name,String id,double money)
{//为了方便初始化,因此写构造方法
this.name=name;
this.id=id;
this.money=money;
}
public abstract void work();//工作行为
}
class Programmer extends Employee //程序员类
{
public Programmer(){}
public Programmer(String name,String id,double money)
{
super(name,id,money);//调用类的构造函数

public void work()
{
System.out.println("程序员的职责是:写代码");
}
}
class Manager extends Employee//项目经理类
{
private double bonus;//奖金
public Manager(){}
public Manager(String name,String id ,double money,double bouns)
{
super(name,id,money);
this.bonus=bouns;
}
public void work()
{
System.out.println("项目经理的职责是:管理程序员");
}
}
public class TestAbstract3 {
public static void main(String[] args) {
Programmer programmer=new Programmer("张三","1001",15000);
programmer.work();
Manager manager=new Manager("李四","1002",25000,500);
manager.work();
}
}
/**演示结果:
 程序员的职责是:写代码
项目经理的职责是:管理程序员


 * **/




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值