* 那么该方法需要修饰为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();
}
}
/**演示结果:
程序员的职责是:写代码
项目经理的职责是:管理程序员
* **/